What is Continuous Delivery?
Continuous delivery is an ongoing DevOps practice of building, testing, and delivering improvements to software code and user environments with the help of automated tools. The key outcome of the continuous delivery (CD) paradigm is code that is always in a deployable state.
As Martin Fowler puts it, “a business sponsor could request that the current development version of the software be deployed into production at a moment’s notice—and nobody would bat an eyelid, let alone panic.”
At its core, continuous delivery follows a streamlined process commonly known as the continuous delivery pipeline. The pipeline begins with the developer committing his code to the source repository. For every check-in, automated tests (unit, regression, performance, etc.) are run to ensure high-quality code. Once the code is verified, the executables are deployed automatically to an intermediate environment such as staging, integration, or UAT. At this point, the code is ready to go into production, and can be pushed live on-demand.
For continuous delivery to work effectively, the fundamental principles need to be in place. Of the many aspects of continuous delivery, the three significant pillars are: continuous integration, configuration management, and test-driven development.
- Continuous integration ensures code worked by several developers across multiple locations are always integrated into a common repository. This avoids the chaos that results from bulky and conflicting code commits.
- Configuration management makes it possible to abstract away the complexities of a product into simple configurations. It makes the software flexible, scalable, and lightweight.
- Test-driven development is what makes continuous delivery what it is. It ensures that the code can be tested and deployed, all in a matter of few minutes. It has shifted the software delivery model from deployments scheduled across weeks or months to multiple releases in a single day.
Continuous Integration vs. Continuous Delivery vs. Continuous Deployment
These three terminologies—continuous integration, delivery, and deployment—indicate evolving maturity in software development practices in that order.
Continuous integration, the first step needed for this practice to work, refers to integrating individual code with the overall development environment after building and testing it. Tools like Jenkins ensure that the code is compiled, run, and tested before integrating with the rest.
Continuous delivery is the layer that sits on top of continuous integration. Continuous delivery, which only works if continuous integration is in place, involves running extensive regression, UI, and performance tests to ensure that the code is production-ready.
Continuous deployment takes the model one step further by automatically deploying code to production after each codecommit and build. While in continuous delivery, the deployment follows an on-demand model; here it is pushed automatically every time. This can only work in highly mature DevOps teams.
The Value of Continuous Delivery
Organizations, both large and small, are seeing the business value of continuous delivery. It requires upfront investment to set up infrastructure and tests, but the efficiency and business results it can produce motivates DevOps teams to invest willingly.
Higher quality products
Automated testing tools in a CD environment ensure maximum code coverage, as well as security, performance, integration, and other features of the code, leaving nothing to chance. This naturally leads to higher quality products. Concepts like containerization eliminate any ambiguities or minor differences in environments that could potentially cause unexpected production issues.
Quicker, less risky releases
Automated build and deployment, along with integrated tests, ensure that manual processes involved earlier in pre-production deployments are now completely removed. By eliminating last-minute surprises, production releases have evolved into just a routine job rather than a panic moment. This approach has helped teams achieve faster time-to-market with an increased number of releases than before.
More satisfied customers
Customers get the benefit of having features delivered faster with more accuracy. Using models such as blue-green deployment, DevOps teams can minimize downtime for customers during a production release, making it a seamless experience. Development teams can also collect constant feedback from users, making it easier to stay on the right track and remain aligned with customer needs.
More efficient and cost-effective DevOps teams
The culture of DevOps has undergone a transformation as development teams have assimilated QA functions. This means more effective and efficient coordination among teams, regardless of role. Also, by reducing operational complexities (build, test, and release), developers are free to focus on higher quality problems, resulting in cost-effective teams that are higher on the motivation curve.
Getting Started with Continuous Delivery
When it comes to continuous delivery, like most things in life, you get out of it what you put into it. DevOps teams must go the full mile to set up and run a successful CD pipeline. This means internalizing the DevOps culture with an urge to experiment, remove overhead, embrace automation, and adopt a mindset of continual learning.
Continuous Delivery Best Practices
Check out our Guide to Building a CD pipeline to get started.