If you've been following DevOps from afar, you might be forgiven for thinking that continuous delivery and continuous integration refer to the same software development practice. After all, both terms sound similar, and they're both seen as integral parts of the DevOps methodology.
Despite a great deal of confusion in various blog articles online, continuous integration and continuous delivery are not the same thing. However, they are related, and the use of one often leads to the other. So what exactly distinguishes the two terms, and what does it all mean for your organization?
Why Does It Matter?
In order to avoid any confusion, your development team needs to be on the same page in terms of the vocabulary that you use.
What Does "Continuous" Mean?
"Continuous" is one of the most important words in DevOps, but to an outsider it's not entirely clear what it means. On a purely semantic level, the word "continuous" means "without interruption." Obviously, the use of "continuous" in terms such as "continuous integration" and "continuous delivery" doesn't mean that your developers are working around the clock to update your software, or that changes are pushed every time that a developer changes a single line of code.
Rather, in these cases "continuous" means that software changes and new features are rolling out on a constant basis. This distinguishes DevOps from other software development philosophies such as the waterfall model, in which development follows a rigid, orderly sequence of stages. Pushing rapid code updates allows developers to be more competitive, responding both to industry and customer demand on the fly.
What is Continuous Integration?
Confusingly, "continuous integration" can actually refer to either of two related software development practices. To begin with, continuous integration specifically refers to the work done by a continuous integration server. Companies that implement continuous integration within their development teams use software such as CircleCI or Jenkins to automate the processes of building and testing. When a developer commits a change to the code base, the CI system automatically builds and tests the changed code to make sure that it can safely merge into the main branch. Performing this check every time that developers commit changes protects the integrity of the code base and minimizes the chance of a breaking change.
The second definition of continuous integration refers to the holistic practice of frequently integrating changes to the code base. In this expanded definition, continuous integration refers to the automated building and testing done by the CI system, as well as other activities such as manual testing and code review.
Regardless of which definition of continuous integration you're using, the core principles remain the same: maintaining an up-to-date code repository, automating software builds and testing, providing rapid feedback, and making it easier to see the results of those builds and get the latest deliverables.
What is Continuous Delivery?
Continuous delivery takes the idea of continuous integration and advances it one step further. With continuous delivery, the code is not only integrated with changes on a regular basis, but it is also deployed to a given environment, such as test or production.
Some teams use the term "continuous delivery" interchangeably with the similar DevOps term "continuous deployment." Both terms are often abbreviated as "CD". The difference between the two terms is subtle but important. Continuous delivery means that the updated code base is available to move onto the next development stage, whether that be testing, review, or production. Continuous deployment, on the other hand, is the natural progression of continuous delivery: All software changes that pass automated building and testing process are automatically deployed to production.
Like continuous integration, the core principles of continuous delivery are to reduce risk and lower the cost of development by automating the code review process. In addition, continuous delivery seeks to ensure that developers have implemented all architecturally significant requirements in the software.
Building a Successful Pipeline
At Weaveworks, we bring CI and CD together with the Deploy feature of Weave Cloud. Deploy automates the deployment of services to your cluster. It observes when new containers show up in the registry, deploys them and then clones the version controlled manifest , modifies it, and pushes it back to git so that your cluster config is always up to date.
Here are a few best practices for building a successful pipeline:
- Commit code to the main repository frequently at regular intervals.
- Commit changes to a feature branch rather than directly to a delivery branch.
- Use Weave Cloud Deploy to automate deployments to your cluster.
- Use container technologies such as Docker to simplify the deployment process.
Continuous integration and continuous delivery are powerful software development practices that have the power to radically transform your development workflow for the better. Learn how you canimplement continuous delivery within your organization with Weave Cloud today.
Thank you for reading our blog. We build Weave Cloud, which is a hosted add-on to your clusters. It helps you iterate faster on microservices with continuous delivery, visualization & debugging, and Prometheus monitoring to improve observability.