The terms Continuous Deployment and Continuous Delivery are most of the time mistaken with each other. The abbreviation CD is sometime used for Continuous Deployment and sometimes used for Continuous Delivery! Hack I even use the terms in wrong situations were I forget to mention the right one, but there is a real difference between the two.
As we want to keep things simple Continuous Deployment is nothing more then deploying every code change to production.
To explain Continuous Delivery, more words are needed. Let’s start by looking at the definition of DevOps from Donovan Brown:
“DevOps is the union of people, process, and products to enable Continuous Delivery of value to our end users”Donovan Brown
When looking at the definition you will notice that Continuous Delivery is an enabler for the DevOps practices. Based on this we can say that Continuous Delivery is a set of tools, processes and techniques for rapid, reliable and continuous development and delivery of software a definition defined by “Martin Fowler”.
This really means that Continuous Delivery means more than just releasing software. This can also be extracted from the eight principles of Continuous Delivery:
- The process for releasing/deploying software must be repeatable and reliable.
- Automate everything!
- If something is difficult or painful, do it more often.
- Keep everything in source control.
- Done means “released.”
- Build quality in!
- Everybody has responsibility for the release process.
- Improve continuously
Combining the eight principles and the definition of Donovan Brown makes Continuous Delivery the real enabler for the DevOps practices were the term is not only a certain form of release management but much more.