Just to clarify.
I am interested in Helm Test you can read more about it over here https://helm.sh/docs/chart_tests/#chart-tests .
Unfortunately, the documentation doesn't provide you a lot of information and that is partly the reason for this question.
What we have:
our-app/templates/tests/test-our-app.yaml
$ helm install our-app
and then we can test that image
$ helm test release-with-our-app
Things I would like to clarify:
Should we have two separate docker images or one for application and tests?...
a). In the case of it being single one image for both application code and test code then we are adding code for the test/tests all on that image, which makes it bigger and additionally we need to put dependencies that are required by tests on that image. To me, this solution seems to be wrong.
b). The case where we have a separate image for tests makes more sense because our app docker image is free of any unnecessary dependencies. What's more, in the second solution we don't really care about the size of the docker image with the test(s) because it is supposed to be a short-living image that shuts down when tests on it are finished.
Is my assumption correct and we should have a separate image for these tests?
In case if have two separate images, one for code another for tests. How do we marry them with each other? Does it mean that we have to pass a Build/Release number to helm test command so it is able to pull down the correct image for tests?
Also in case if we have two separate images. Should I specify the test run in a docker file for tests? for example :
CMD ["sh", "-c", "gradle test -Denvironment=$ENVIRONMENT"]
Or should it be inside chart
our-app/templates/tests/test-our-app.yaml
For example test.yaml from mysql repo:
https://github.com/helm/charts/blob/master/stable/mysql/templates/tests/test-configmap.yaml
an example you can find in mysql chart by the following link https://github.com/helm/charts/tree/master/stable/mysql/templates
Answering my own question:
We don't have to pass anything, when you run "helm test yourapp", helm looks for successfully deployed version of yourapp and runs helm test with that version.
3. When you run the "helm test yourapp" command. Helm looks in file
yourapp/templates/tests/smoke-test.yaml
calls command that is specified by the following path:
spec/containers/command: ["sh", "-c", "your command"]
plz have a look on the screenshot or go to git repo of mysql chart https://github.com/helm/charts/tree/master/stable/mysql/templates
Just starting this topic:
In my opinion it depends on your needs.
For the 1,2,3 - as I understood "helm test" is very flexible and it can perform any additional tests depends on your needs.
You can use different images and different approaches or one image with different arguments but sometimes probably it can be impossible due to docker entrypoint - please see commands and arguments.
According to the 4 question - in my opinion you should consider using configmaps and secrets to define and expose env variables into your pods.
Additional resources "helm test":
Hope this help.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With