Continuous Delivery: The Deployment Pipeline
Introduction
Continuous Delivery is about getting from idea to valuable software in the hands of its users, repeatably and reliably.
The Deployment Pipeline is a machine that organises our software development work, to go from Commit to Releasable Outcome as quickly and efficiently as possible.
Objectives of the Deployment Pipeline
the objectives of the Deployment Pipeline are to:
Discard release candidates on any failing test, and so reject changes that are not fit for production
Carry out all necessary testing on all release candidates, so that there is no more work to do.
Complete this cycle multiple times a day.
Important the goal of the Deployment Pipeline is not to prove that our software is good. Rather, it is based on the scientific principle of challenging our hypothesis, that is testing new code to see if it fails.
Key Stages
Version Control - We have to take the version control stage very seriously and apply it to code, dependencies, configuration, infrastructure - everything!
Commit - Keep your commits lightweight so that it is easy to understand the changes, and it is fast to deploy any changes quickly to production. It also helps us revert any commits that are causing serious trouble in production quickly.
Artifact Repository - A successful commit output is a "Release Candidate" that is saved in the Artifact Repository. For Github or Gitlab users, this can be a Pull Request or Merge Request pointing to the master branch.
Acceptance Testing - User-centred testing, in life-like scenarios, and production-like environments to evaluate the code from the user's perspective. We generally set up a staging environment that is identical to production.
Automated Testing - Any tests necessary to determine the reliability of our software.
Manual Testing - Exploratory testing to assess the usability of our software from the perspective of an external user. In Continuous Delivery, we eliminate manual regression testing.
Deployment - If the Deployment Pipeline passes a Release Candidate we should be ready, confident, to deploy it.
In conclusion, the deployment pipeline is a critical component of the DevOps approach to software development. It enables organizations to quickly and reliably release software updates to customers, reduce the risk of errors and downtime, and improve the overall quality of their software. By implementing a deployment pipeline, organizations can streamline their software development process and stay ahead of the competition in today's fast-paced digital world.