Release-based deployments are sort of nice in the sense that you plan, draw a line, prepare stuff and release one or more components at the same time. It however stalls feature deployments a lot (e.g. a nice feature can be implemented in say a day but the release is sheduled in a month). It also gives way to out-of-order releases to please the business. Agile (CI/CD) aims to alleviate some of these problems.
Prerequisites
As part of the transition process, one has to establish a stack. In my case, it's formed of:
- Jenkins,
- Docker,
- Helios and
- Rundeck ( this we aim to retire)
In order to transition to CI/CD, we need to build a pipeline (be it implemented as a series of jenkins jobs, a jenkins pipeline or a combination of the two). A relatively simple approach can be:
- git checkout/pull
- compile
- test
- build e.g. jar/war
- deploy components (e.g. nexus)
- build docker images (if needed)
- build helios jobs (if needed)
- mark successful builds (e.g. tag release)
- auto-deploy to dev (if successful)
- be able to select a destination (dev/test/prod)
- get list of available versions
- select version to promote
- allow user to select different version (optional)
- deploy selected version to the destination environment
This approach can always be improved with e.g. using pull requests, but we can already use the approach as a proof of concept to speed up deployments to dev and inform developers if something goes wrong.
HTH,
Member discussion: