Update Guide

Learn all about how to update your OpenDevStack repositories and the running installation of it.

How to update your OpenDevStack repositories

Updating repositories means that new refs from repositories under github.com/opendevstack are pushed into the repositories in your BitBucket instance. Note that only updates to the production branch in BitBucket will have any effect on the OpenDevStack installation.

First, you need a clone of each repository in BitBucket which should be updated on your local machine.

Once this has been done, you need to fetch new refs from github.com/opendevstack. To do so, add a remote pointing to it like this:

git remote add ods https://github.com/opendevstack/<REPO_NAME>.git

Now you are ready to update the refs. It is recommended to update both the master branch and, unless you want to live off the bleeding edge, a release branch such as 1.0.x. Use the steps shown below:

# Ensure you have the latest refs from ODS locally
git fetch ods
# Update master
git checkout master
git reset --hard ods/master
git push origin master
# Update 1.0.x
git checkout 1.0.x
git reset --hard ods/1.0.x
git push origin 1.0.x

So far, your OpenDevStack installation has not been affected yet because the production branch has not been updated yet. To do that, it is recommended to create a pull request on BitBucket from 1.0.x into production This serves as a gate to control changes coming in, and spread knowledge about what has changed exactly.

Now that changes are "live", you need to update (parts of) the installation.

How to update your OpenDevStack installation

Updating consists of two parts: following the general update procedure (applicable to all version updates) and a version specific update procedure.

General update procedure

Before proceeding, it is advisable to make a backup of the existing OpenShift configuration. This can be done easily with Tailor:

# backup CD project
tailor export -n cd > backup_CD.yml

# backup provision app projects
tailor export -n prov-cd > backup_PROV_CD.yml
tailor export -n prov-dev > backup_PROV_DEV.yml
tailor export -n prov-test > backup_PROV_TEST.yml

Note that the executing user needs to have permissions to access all resources in the cd namespaces for this to work properly.

Next, update Tailor to the version corresponding to your new OpenDevStack version.

Then, update the configuration parameters (located in ods-configuration) according to what has changed in the ods-configuration-sample repository.

Once configuration is up-to-date, the OpenShift templates stored within OpenShift need to be updated:

# Within your local "ods-project-quickstarters" repository
cd ocp-templates/scripts

Next, start a build for all build configs in the cd namespace to create new images.

Finally, the provisioning app should be updated. To do that, run tailor update in each ocp-config folder, and then trigger a build in Jenkins to redeploy the service.

Now that the general procedure has been completed, you need to apply all the update notes below which apply to your version change.

0.1.0 to 1.0.0

Update xyz-cd projects

There is a new webhook proxy now, which proxies webhooks sent from BitBucket to Jenkins. As well as proxying, this service creates and deletes pipelines on the fly, allowing to have one pipeline per branch. To update:

  • Setup the image in the cd project by running tailor update in ods-core/jenkins/webhook-proxy/ocp-config.

  • Build the image.

  • Setup the webhook proxy next to each Jenkins instance. E.g., go to ods-project-quickstarters/ocp-templates/templates and run oc process cd//cd-jenkins-webhook-proxy | oc create -f- -n xyz-cd. Repeat for each project.

Update components

For each component, follow the following steps:

In Jenkinsfile:

  1. Set the shared library version to 1.0.x.

  2. Replace stageUpdateOpenshiftBuild with stageStartOpenshiftBuild.

  3. Remove stageCreateOpenshiftEnvironment and stageTriggerAllBuilds.

  4. Adapt the build logic to match the latest state of the quickstarter boilerplates.

  5. Remove verbose: true config (replace with debug: true if you want debug output).

  6. Configure branchToEnvironmentMapping, see README.md. If you used environment cloning, also apply the instructions for that.

In docker/Dockerfile:

Adapt the content to match the latest state of the quickstarter boilerplates. In BitBucket, remove the existing "Post Webhooks" and create a new "Webhook", pointing to the new webhook proxy. The URL has to be of the form https://webhook-proxy-$PROJECT_ID-cd.$DOMAIN?trigger_secret=$SECRET. As events, select "Repository Push" and "Pull request Merged + Declined".

Update provisioning app

If you want to build the provisioning app automatically when commits are pushed to BitBucket, add a webhook as described in the previous section.