Probably every common agile developer has heard these terms. But have you ever thought about the difference between them. I have really been wondering about this question and after some investigation I would like to share all information on this topic i have gathered.
To be able to understand continuous deployment it can be helpful to define its predecessors first – continuous integration and continuous delivery. Continuous integration (CI) usually refers to integrating, building and testing code within an integration environment. It assumes frequent integration of developers code into a shared repository, at least once a day. This makes sure that the local version of every individual developer doesn’t differ too much.
Moreover each CI pipeline can and should be verified by an automated build and automated tests. It helps to detect failures early and to solve the problem very fast. And when a failure occurs the best practice is to fix the problem immediately. Because the CI pipeline should run on every commit or push, it means that all the next executions will fail as well.
The next image shows how a common and general deployment pipeline looks like. This is a minimum set of validations through which a piece of software must pass on its way to release.
SO WHAT IS THE DIFFERENCE?
Unlike the continuous delivery, CI doesn’t have a clearly defined target. All that we have at the end of the pipeline execution is that the code is successfully integrated to the test environment and the commit didn’t break any of existing tests.
Despite the fact that both continuous integration and continuous delivery pipelines look pretty similar, the latter refers to keeping your application deployable to production at any point as long as no automated tests have failed. Whether it’ll be done immediately or not is more of a business question. Important is that the deployment to production in a continuous delivery pipeline is a manual process.
And continuous deployment pipeline in its turn goes even further. It doesn’t need any human interaction at all. It’s a fully automated process, that starts from the commit to the code repository and ends with a deployment of every valid build to production.
In conclusion the benefit of continuous integration is a possibility to detect errors fast, find out its location and remove it easily. Its key principles are revision control, build automation and automated tests. Continuous delivery and deployment are made to keep your application deployable at any time and in the case of continuous deployment automatically deliver your code to production whenever it is changed. All the workflows satisfy the main agile principles and allow to minimize the feedback time for developers about failing tests/builds.
- Viktor Varcics’s book „The DevOps 2.0 Toolkit: Automating the Continuous Deployment Pipeline with Containerized Microservices“