Continuous Delivery Perspective Changers Part 1 ā Releasing Any Version to Any Environment
Tags: #cicd #brainbender
I am in the process of reading Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by David Farley and Jez Humble. Most of the principles in the book align with what Iāve learned as a technical professional for the last 20 years, but occasionally Iāll see something that bends my brain a bit. Hereās an example of that from the first chapter:
The aim of the deployment pipeline is threefold. First, it makes every part of the process of building, deploying, testing, and releasing software visible to everybody involved, aiding collaboration. Second, it improves feedback so that problems are identified, and so resolved, as early in the process as possible. Finally, it enables teams to deploy and release any version of their software to any environment at will through a fully automated process.
The reason why this seems so strange to me is that Iām used to the following workflow:
- Build out the mostly-static prod and non-prod environments ahead of time using IAC
- Example: A set of Ansible playbooks that build out a Stage and Prod environment
- Develop an application and automated build process that does things like run tests
- Example: A Django application that is built and tested using a Makefile
- Write a Pipeline script that is able to run your Makefile and deploy the resulting build to one of the static environments from step 1.
- Example: A Jenkins Pipeline that is running within a Jenkins server that was created before step 1
However, my interpretation of āreleasing any version to any environment isā is that I can deploy any arbitrary version of my app to a completely new environment, run my tests, and then throw that environment away. Oh, and all of the code that does that should live within my appās repo.
So I guess my questions at this point are...
- Whatās a good āstarterā framework for creating a new environment on-demand that can run my app?
- Am I making this too complex? Should I just use whatās built into Gitlab or Github and replace a few days of work with 5 good lines of config?
Unfortunately I donāt think this topic is covered until Chapter 13, and Iām on Chapter 2. Oh well, it good motivation to get back to work š¼