Continuous deployment vs. continuous delivery
In an active CI/CD pipeline, teams continuously build, test, and deploy new code. In a robust continuous deployment pipeline, all of the builds, tests, and deployments exhibit a high degree of automation. Establishing each of the environments and configuring the various types of testing suites enables developers to submit code with confidence. Preliminary automatic testing quickly reveals bugs or problems. Early identification means that developers can immediately begin work to find a remedy for any defects found.
When a change is dev-complete, a code review is done with a QA team member testing all new code. Following tester approval, the pipeline automatically picks up the code and runs all applicable tests. If all of the code passes all of the tests, it automatically proceeds directly to a performance testing environment and then onto the production environment.
The additional automation is what distinguishes continuous deployment from mere continuous delivery.
Continuous delivery: Human intervention is necessary to update the production environment with the latest changes.
Continuous deployment: Updates automatically move to the production environment.
The two pipelines are similar, but there is one significant difference.
Continuous delivery: The manual approval for deployment in the pipeline offers discontinuity.
Continuous deployment: Files automatically deploy to production (when all of the tests pass).
Keep in mind that manual deployment is not a manual file-copy operation. It involves a manual click of the button necessary for files to move into the production environment. The small human-intervention step often leaves open a large performance gap when comparing the two types of pipelines.
Increasing the level of automation for a CI/CD pipeline requires developers and testers to steadily pursue higher levels of quality. Beyond writing reliable code and thorough tests, leveling up involves automating repetitive tasks to minimize the possibilities for human error, which is especially important for any sequence with multiple steps. Automating mundane tasks also provides developers more time to spend on product improvements.