Continuous delivery vs. continuous deployment
Speed high-quality code to customers with these two automation practices.
What are continuous delivery and continuous deployment?
Along with continuous integration, continuous delivery and continuous deployment are practices that automate phases of software delivery. These practices enable development teams to release new features, enhancements, and fixes to their customers with greater speed, accuracy, and productivity.
Continuous delivery and continuous deployment have a lot in common. To understand the differences between these practices—and find out which one you want to implement—we need to identify the phases of software delivery we can automate.
Automating the software delivery process
Consumers demand increasing personalization and security from products. To meet those demands and deliver software faster and more reliably, development teams can adopt a DevOps culture.
A DevOps culture breaks down siloed disciplines and unifies people, process, and technology to improve collaboration and coordination. As a result, code changes reach production—and new value reaches the customer—as soon as possible.
Though development, IT operations, quality engineering, and security teams all work closely together under DevOps, the software delivery process remains just as complex. DevOps organizes software delivery into four phases: plan, develop, deliver, deploy, and operate.
Software delivery in DevOps
Without automation, development teams must manually build, test, and deploy software, which includes:
- Checking in, testing, and validating code.
- Merging code changes into the main branch.
- Preparing code to go live.
- Creating a deployable artifact.
- Pushing code to production.
Phases to automate
Continuous integration, continuous delivery, and continuous deployment are all practices that automate aspects of the develop and deliver phases. And each practice takes the automation one step further, starting with continuous integration.
The difference between continuous delivery and continuous deployment
To describe continuous delivery and continuous deployment, we’ll start with continuous integration. Under continuous integration, the develop phase—building and testing code—is fully automated. Each time you commit code, changes are validated and merged to the master branch, and the code is packaged in a build artifact.
Continuous delivery automates the next phase: deliver. Under continuous delivery, anytime a new build artifact is available, the artifact is automatically placed in the desired environment and deployed.
Continuous integration and continuous delivery (CI/CD)
When teams implement both continuous integration and continuous delivery (CI/CD), the develop and the deliver phases are automated. Code remains ready for production at any time. All teams must do is manually trigger the transition from develop to deploy—making the automated build artifact available for automatic deployment—which can be as simple as pressing a button.
With continuous deployment, you automate the entire process from code commit to production. The trigger between the develop and deliver phases is automatic, so code changes are pushed live once they receive validation and pass all tests. This means customers receive improvements as soon as they’re available.
Continuous delivery vs. continuous deployment: which one should you choose?
Whether you adopt continuous delivery or continuous development, you’ll find tools to support you.
Before you consider which of these practices to implement, determine if your organization has a DevOps culture that can support them. Next, because DevOps teams strive to automate the entire software delivery process, the question is not “which one is better?” Instead ask, “do we need a manual trigger between continuous integration and continuous delivery?”
As you look for the answer, use these questions to guide you:
- Can you deploy without approval from stakeholders?
- Do your system and gating requirements allow for end-to-end automation?
- Can you expose your customers to production changes a little at a time?
- Does your organization respond to errors in production quickly?
If you answered yes to all, you may want to consider practicing continuous deployment and automate software delivery completely—from code commit to production.
If you answered no to any, you may need to start with continuous integration and continuous delivery (CI/CD). You’ll automate the creation of production-ready code that’s always just one manual approval from deployment. Over time, you can work toward continuous deployment and full automation of your software delivery process.
Either way, you’ll gain the common advantages of each practice:
- Changes are automatically built, validated, and tested.
- Code is always deployable—no more release-day anxiety.
- Releases receive faster stakeholder and customer feedback.
- Developers are more productive with fewer manual and administrative tasks.
- Since changes are small and frequent, failures are rare and create minimal instability.
Tools for continuous integration, continuous delivery, and continuous deployment
DevOps teams rely on toolchains—series of connected software development programs—to automate software delivery. The tools you’ll use depend on which automation practice you choose, and which phases that practice automates. Here are some examples.