In one of my creative writing pursuits, I launched a podcast to spotlight recorded readings of short stories. Each new episode is promoted across my blog properties by publishing posts with the audio and text to follow along.
Rather than waiting until the morning the episode debuts, I draft these posts in advance so all I have to do is add the podcast link and then click publish. I also add all the details in the podcast platform so the episode releases at 5 AM without me manually queuing it. Not only is this better for my sleep schedule, but episodes are always available when subscribers expect them.
In this example, the goal is to achieve a smooth rollout of the finished product. Continuous delivery is a software engineering approach with the same objective. A continuous delivery model for my podcast would orchestrate the entire workflow so all I have to do is press publish, and the other pieces would deploy. When it comes to the rollout of complex systems, this is the preferred method versus manually testing and configuring the application for release.
What is continuous delivery?
Continuous delivery (CD) is an approach to software development where code changes are packaged for rollout to production automatically. Its goal is to speed development, lower costs, and reduce risks without sacrificing code quality.
CD is achieved by implementing a straightforward release process that is easily repeatable and limits manual processes. In an ideal CD workflow, human intervention is only needed to deploy the application into production.
CD is the next evolution of software pipeline automation once a development team has achieved continuous integration (CI). CI automates the merging and testing of code changes, primarily focusing on unit testing. Once the code has passed evaluations, the built application is deployed to a staging environment to undergo additional testing. These evaluations include integration testing, performance testing, UI testing, and more.
When combined, CI and CD form the CI/CD pipeline, which moves code from individual developers' machines through automated testing to a production-ready build at the end. All that is required at this point is for a team member to manually deploy the updated version, usually at regular intervals. Given this focus on automation and speed, CI/CD is a cornerstone of the DevOps model.
This video from Thoughtworks provides a simplified explanation of continuous delivery:
However, some organizations prefer to release updates as soon as they have passed all test cases. This is the main distinction between continuous delivery and the related practice of continuous deployment.
Continuous Delivery vs. Continuous Deployment
Continuous delivery requires manual approval before deployment, whereas continuous deployment will automatically roll out the update once the application has passed test cases. In practice, if a developer's changes pass all evaluations, they could be rolled out to the end user within minutes.
Continuous deployment is the next evolution of the CI/CD pipeline once an organization has mastered continuous delivery. The primary goal of DevOps automation is to remove as many manual processes as possible, so continuous deployment enables seamless and rapid deployments to meet the changing needs of customers.
However, some customers may not want — or regulation may prohibit — constant updates to their software. In this case, continuous delivery will enable the development team to easily release software at a cadence that matches the customers' preferences.
This is one advantage of the continuous delivery approach. Let's examine more below.
Benefits of Continuous Delivery
CD, combined with CI, provides several concrete benefits for development teams.
1. Find bugs faster.
CD is built on a strong testing strategy, automatically testing an application against expected behavior in the "real world" after deployment. This enables developers to discover bugs before the code is pushed to production, where it may then cause disruptions and frustration for users.
Not only does CD increase customer satisfaction, but it also allows the development team to anticipate these defects in future releases, whereas a bug that does not actively disrupt the application may never be discovered and thus never addressed.
2. Decrease costs.
CD lowers the costs of delivering new software and updates by eliminating manual processes so developers can spend more time on higher-order tasks. The speed of a CI/CD pipeline also means that more features can be delivered sooner. This increases the output of the development team and frees bandwidth to pursue more projects without needing to hire more engineers.
3. Improve quality.
CD standardizes the requirements for an application by implementing them in test cases, meaning the product will be much more likely to meet users' needs.
CD also allows development teams to deliver a minimally viable product (MVP) faster so that the customer can then provide direct feedback on areas for improvement. Feedback is vital for developers to continue delivering value to the customer.
This agile approach is usually preferable to a waterfall methodology where the customer won't see the product until it is completely finished. After it's delivered, they may decide it's not meeting their needs, and all the time invested into developing the full product is now a sunk cost.
4. Lower risk.
The first goal of any software deployment is to "do no harm." The second goal is to deliver value to the customer, but they cannot enjoy an enhanced UI, for example, if the application goes down because of the update.
By standardizing the release process and implementing test validations to catch bugs before they're released into production, CD lowers the risk of each deployment and gives developers greater confidence in their application.
5. Increase employee satisfaction.
It's no secret that people prefer higher-order work to manual, repetitive tasks. By implementing an automated CD workflow, an organization removes pain points for its developers and frees them to focus on strategy and optimization. In addition, the speed of CD pipelines means that engineers' code is deployed sooner so they can see the impact of their work and how it helps customers achieve their goals.
6. Speed deliveries.
CD removes roadblocks in the development process so that updates are ready to deploy as soon as they are validated. This efficiency allows the engineering team to agilely roll out new features to satisfy customer needs. When an urgent issue comes up, this speed advantage pays more dividends by allowing developers to quickly issue security patches or other fixes.
Now that you understand the benefits of a CD pipeline, let's review how to build one.
How to Build a Continuous Delivery Pipeline
A continuous delivery pipeline expands on the workflows and tools already implemented to achieve a CI pipeline. During the CI process, the code has been compiled to build the application and unit tested to validate functionality and quality. If the application fails to build or the unit tests fail, the code is returned to the developers to remediate and test again.
Now, the application is ready for more rigorous testing. You will need a solution to create a staging area that mirrors the production environment. Development teams typically turn to cloud services to provide a multistage environment to host the application and orchestrate the testing workflow, since cloud hosting can scale to meet processing demands.
A CD pipeline may have quality gates that define criteria for success. These factors are benchmarks that the performance, integration, UI, and other tests must meet before the application moves on to the next stage. AI may be useful for determining the cause of failures and potential fixes.
As part of this testing strategy, you will want to automate as many tests and processes as possible. This improves both speed and the possibility of human error that comes with manual procedures, such as executing tests in a different order. When it comes to CD, everything should be standardized and repeatable.
Finally, invest in observation and monitoring tools, since an outage in one part of the pipeline may cause the entire process to break down. Building automated alerts and redundancies will ensure that downtime for one testing tool, for example, does not disrupt deliveries to the customer.
This video from Edureka reviews the concepts of CD and demos how to build a CD pipeline using Jenkins:
Support your customers' needs with continuous delivery.
CD is the next step in automating the development process after a team has mastered their CI pipeline. Depending on the needs of the customer and the organization, DevOps teams may move beyond continuous delivery to continuous deployment and streamline the entire pipeline from code to customer. In this scenario, continuous delivery is still a stepping stone toward the final goal of automated deployments.
CD automates and standardizes the testing strategy for applications to validate that they are ready to meet users' needs in the real world. This process catches bugs sooner, improves product quality, and lowers the costs of development, along with many other benefits for developers and their customers.