jenkinscommand-line-interfaceopenshiftopenshift-client-toolsbuild-pipeline

Openshift CLI - update Application with template and oc new-app


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

Is there a way to solve this problem? Maybe something like a new-app replace command where all the configs are being 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