CI/CD - The term for Continuous Integration and Continuous Delivery or Continuous Deployment. I often hear many different takes on what “CD” means to people. To some it means Continuous Delivery. To others, it means Continuous Deployment. Is there a distinction? Absolutely. A drastic one.

Continuous Delivery is creating potentially shippable code through deployment automation. In many cases, this means producing an artifact through CI that will be deployed through the Continuous Delivery process. It might get deployed to various non-prod environments with some test automation. Most importantly, it would have gone through an approval process before a production deployment.

In contrast, with Continuous Deployment, we do not have an approval process. Instead, we rely on test automation to catch regressions and stop the flow of work before it makes it out to production. Continuous Deployment is not for the faint of heart and requires significant work in order to pull off. Requires an automated testing mindset including all various flavors of tests like: unit, integration, functional, and acceptance tests.

Here’s a pretty picture by Puppet. It highlights the difference.

So when we talk about CI/CD, I believe we’re mostly talking about Continuous Delivery. Why? Because far less people are implementing Continuous Deployment since it’s the next level-up from Continuous Delivery.