The terms Continuous Delivery (CD), Continuous Deployment (CD) and Continuous Integration (CI) are used a lot when talking about DevOps, but are also the cause of much confusion not least because both Continuous Delivery and Continuous Deployment are often given the same acronym CD.
We will start by looking at definitions I have come across in the past that in my opinion explain these 3 practices very well.
Continuous Integration (CI)
“Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.”
Martin Fowler, 2006 (http://martinfowler.com/articles/continuousIntegration.html)
Continuous Deployment (CD)
"Continuous deployment is the next step of continuous delivery: Every change that passes the automated tests is deployed to production automatically. Continuous deployment should be the goal of most companies that are not constrained by regulatory or other requirements."
Continuous Delivery (CD)
“Continuous delivery is about putting the release schedule in the hands of the business, not in the hands of IT. Implementing continuous delivery means making sure your software is always production ready throughout its entire lifecycle – that any build could potentially be released to users at the touch of a button using a fully automated process in a matter of seconds or minutes”
For you more visual learners:
Where does the confusion stem from?
The 3 practices all interrelate, Continuous Integration is often referred to as being part of Continuous Delivery and Continuous Delivery is referred to as being an extension of Continuous Integration. Continuous Deployment is known as the next step to Continuous Delivery (deploying the change into production once it has been proven to be deployable). It is not possible to be practicing Continuous Delivery without Continuous Integration although it is possible to be doing Continuous Integration without Continuous Delivery. It’s also not possible to be Continuously Deploying without partaking in Continuous Delivery.
CD, CD & CI and DevOps
Continuous Delivery is often mentioned by DevOps practitioners as an ultimate goal of a DevOps strategy or implementation.
One of the benefits of Continuous Integration is that it forces developers and developer teams to integrate their work as soon as possible, which eventually increases developer communication and makes the integration process a lot quicker since issues can be detected a lot earlier.
Practicing Continuous Delivery should enable companies to release changes to their customers much sooner since testing happens at every step. How often a company does this is dependent on the type of company; an internet based company like Netflix is likely to perform multiple releases daily whereas a more traditional enterprise, like a building society for example tend to have much less frequent release cycles.
Continuous Deployment is optional when “doing” DevOps as it’s not be feasible for every organisation to be continuously deploying due to regulations.
All clearer now or do you have a view on how these terms differ and interrelate?