Issue
I am currently building and deploying an Application with a template using
oc new-app -f ./openshift/template.yaml
I am using a template and not separate Deployment-, Build-, etc. configs because I also want to be able to pass parameters like
oc new-app -f ./openshift/template.yaml --p DATABASE_PW=PW
To my knowledge this is not possible using
oc create -f ./openshift/deploymentconfig.yaml --p SOME_PARAM=TEST
Now I have also integrated this is in a Build Pipeline with Jenkins. My problem is now this. This all works fine on the first deployment, but it will not work for a redployment. I can either just rebuild the app with Jenkins like
oc start-build my-app
But this will cause that changes is my Template will not be considered. I also cannot use new-app as it does not replace existing configs producing an error similar to this
--> Creating resources ...
error: services "my-app" already exists
....
--> Failed
Now is there a way to solve this problem. Maybe something like a new-app replace command where all the configs are beeing replaced? I am currently solving this by killing the app completely using a shell file and then bringing it up again but that will always cause a downtime of a few minutes which really bothers me
Solution
As Graham pointed out the best way to solve this is to use
oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2
to first fill your template with your parameters. Then pipe the command to oc apply to apply it to the application which will leave you with the following command
oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2 | oc apply -f -
This will create or update all your configs. It will also check which configs have been changed.
If you want to start the build directly afterwards use
oc start-build my-app
Answered By - relief.melone