The DevOps trend has resulted in the inception of a number of methodologies that aim to accelerate software delivery and accuracy. It gives developers the tools to deliver high-quality applications, with fewer bugs, and implement changes easily and continuously.
In the world of DevOps, the terms CI (Continuous Integration) and CD (Continuous Deployment) are used frequently to describe modern development practices. The aim of CI and CD is rather straightforward:
CI defines a practice that focuses on integrating the efforts of different teams to accelerate software releases.
CD makes sure that every change that is made to the code in production is released to customers quickly and efficiently.
Then what is Continuous Delivery?
Let’s first understand in a little detail as to what exactly these terms really mean -
Continuous integration integrates coding efforts of individual developers into a central repository so changes can be merged quickly and easily. It eliminates the building of software features in isolation and ensures working products are built several times on any given day. Since every change is validated by creating a build, running static code analysis and then running automated tests against the build, bugs are detected early in the life cycle – leading to the outcome of a better-quality application.
Continuous deployment goes one step ahead and makes sure every change that passes through all stages of the production pipeline (technically the output of CI) is released to customers. Since the deployment is automated, there is no human intervention; it is an excellent way to shorten the feedback loop; only a failed test will prevent a new change to be deployed to production. Developers can focus on building the application and see their work go live as soon as they've finished working on it.
Continuous delivery - The primary aim of Continuous Delivery is to ensure the entire value chain, right from the requirement gathering until production deployment, works like an assembly line in a manufacturing plant. It is much broader than continuous deployment. A vast majority of the industry sees CD as Continuous Delivery with the definition of Continuous Deployment. There are others who say CI+CD is also Continuous Delivery.
I don’t agree to both these definitions for the simple reason that if a team has the capability to continuous deployment along with or without continuous integration (essentially automation of build and release process), it doesn’t mean that they are capable of continuously delivering the change(s) to production or market.
Continuous Delivery is a combination of technology (including tools), processes, practices, and culture and the end goal is to release application changes quickly and easily with a quick rollback plan
When rightly implemented, with continuous delivery, application delivery teams can gain the following -
Automation of repetitive tasks while the team focuses on solving “real” problems
High quality work in small batches
Enables the platform for Continuous Improvement
The end results? High velocity (Speed in the right direction). High productivity. High sustainability. Happier teams. High-quality products.
Continuous Deployment ≠ Continuous Delivery: While many confuse these two terms (with a common abbreviation as CD) as the same, continuous deployment is not the same as continuous delivery. In fact, continuous deployment is a subset of continuous delivery. Sometimes people use these two words interchangeably for CD and with a minor change.
Continuous Deployment + Automation ≠ Continuous Delivery: While automation plays a critical role in continuous delivery, just adding automation to continuous deployment and removing manual intervention for triggering the deployment does not make it continuous delivery.
CI+CD ≠ Continuous Delivery: Many also see CI+CD as Continuous Delivery. A team’s capability to continuously deploy doesn’t mean that it is capable of continuously delivering the change to production. Continuous Delivery doesn’t start after a developer check-in the code.
Tools and Technologies ≠ Continuous Delivery: There are several technologies and tools that help in the implementation of continuous delivery. However, apart from tools and technology, continuous delivery actually comprises of a set of practices and new methodologies that must be adopted. The tools should just be leveraged to optimize team performance.
As you can see in the diagram below, continuous delivery comprises of continuous development, integration, deployment testing, and service management.
If you are not considering all these aspects in your DevOps initiatives, you are certainly leaving some crucial pieces out.
With organizations struggling to bring high-quality applications into the market in the shortest time-frame possible, DevOps has become a global mantra. By bringing the development (from the requirements) and operations teams to work together, it is enabling organizations to build good quality, bug-free applications – quickly and easily.
In the whole scheme of DevOps, people often use the terms of continuous deployment and continuous delivery interchangeably. But there is a fundamental difference between the two and hope this blog gives you a perspective on the same.
Let’s connect if these thoughts resonate with you or you disagree - let’s learn from each other :)