What Is Continuous delivery in DevOps?
On This Page
Quick Definition
Continuous delivery is a way of making software where every change a developer makes is automatically checked and made ready to go live. It means the software is always in a state where it could be released to users if needed. This automation helps teams release updates more frequently and with less manual work.
Commonly Confused With
Continuous integration focuses on automatically building and testing every code change, often multiple times a day. Continuous delivery extends CI by also automating the deployment to staging and preparing the artifact for production release. CI is a prerequisite for CD, but CD includes the release pipeline beyond the build.
CI: Every commit builds and runs unit tests. CD: Every commit builds, tests, deploys to staging, and waits for approval to go to production.
Continuous deployment is the next step after continuous delivery. In continuous deployment, every change that passes all automated tests is automatically released to production users. There is no manual approval step. Continuous delivery stops at the manual approval gate.
CD delivery: Code is deployed to staging, then a human clicks 'Go' to release to production. CD deployment: Code passes tests and immediately goes to production without human intervention.
Traditional release management involves manual coordination, scheduled release windows, and often separate teams for development and operations. Continuous delivery automates the process, enabling frequent, low-risk releases. It replaces the big-bang, manual approach with an automated, repeatable pipeline.
Traditional: Developers finish code, hand it to ops, ops manually deploy during a maintenance window. CD: Code is automatically built, tested, and staged; ops just approves when ready.
Must Know for Exams
For the AZ-400 exam, continuous delivery is a core topic. The exam objectives explicitly include 'Implement a release management strategy' and 'Define and implement release pipelines.' Candidates are expected to understand the difference between continuous integration, continuous delivery, and continuous deployment.
Questions often ask you to identify the correct practice for a given scenario. For example, if a team wants every change that passes tests to be immediately available to users, that is continuous deployment. If they want every change to be deployable but require manual approval before production, that is continuous delivery.
You will also need to know how to configure multi-stage YAML pipelines in Azure Pipelines, including stages for build, test, staging, and production. The exam tests your ability to design release gates, approval workflows, and manual intervention steps. Expect scenario-based questions where you must choose the correct pipeline structure or identify why a deployment failed.
You may also be asked about artifact management, Azure Artifacts, and how to link build artifacts to release pipelines. The exam covers release strategies like blue-green deployments, canary releases, and feature flags, all of which rely on continuous delivery. You will need to know how to integrate security scanning, compliance checks, and notification services like Azure Monitor or Service Hooks into the pipeline.
The exam may present a scenario where a team is moving from manual releases to automated releases, and you must recommend the appropriate tools and practices. Understanding the roles of Azure Boards, Azure Repos, and Azure Test Plans in the context of CD is also important. Finally, be prepared to read and interpret YAML pipeline definitions, identify syntax errors, or recommend improvements to increase reliability and speed.
Simple Meaning
Think of continuous delivery like a high-quality bakery that prepares fresh batches of bread every hour. The bakers mix the dough, let it rise, shape it, and bake it. Each batch is checked for quality and then kept warm, ready to be brought out to the display case at a moment's notice.
The bread is always fresh, always ready, and the bakery never has to start from scratch when a customer walks in. In the same way, continuous delivery means that every time a software developer makes a change to the code, that change goes through an automatic pipeline that builds it, runs tests, checks for errors, and then stores it in a deployable state. The code is always ready to be sent to users.
The team does not have to do a big, stressful manual process to prepare a release. Instead, they can decide to release the latest version at any time, often multiple times a day. This reduces risk because changes are small and tested thoroughly.
It also lets teams get feedback from users faster and fix problems quickly. Continuous delivery does not mean every change is automatically released to users. That is called continuous deployment.
In continuous delivery, the final step of actually releasing to production is still a manual decision. But the code is always in a release-ready state, so that decision can be made quickly and safely. This practice relies heavily on automation, a reliable testing suite, and a well-defined pipeline that ensures every change meets quality standards before it can be considered ready for production.
Full Technical Definition
Continuous delivery (CD) is a software development practice that extends continuous integration (CI) by automating the entire release process up to the point of production deployment. In a continuous delivery pipeline, every code commit that passes all automated tests is automatically built, packaged, and deployed to a staging or pre-production environment that mirrors production. The key distinction from continuous deployment is that the final promotion to the live production environment requires a manual approval gate, though the artifact is always in a deployable state.
The pipeline typically includes stages such as source code checkout, compilation, unit testing (often using frameworks like xUnit or NUnit for .NET or pytest for Python), static code analysis (e.g.
, SonarQube), integration testing, security scanning (SAST/DAST), artifact creation (e.g., Docker images, NuGet packages, or JAR files), and deployment to a staging environment. After successful validation in staging, a release candidate is stored in a binary repository like Azure Artifacts, JFrog Artifactory, or Nexus.
The manual approval step might use Azure Pipelines’ release gates or environments with checks. Infrastructure as code (IaC) tools such as Terraform, ARM templates, or Bicep are often used to provision and configure environments consistently. Key metrics in continuous delivery include deployment frequency, lead time for changes, mean time to recover (MTTR), and change failure rate.
Certified tools for implementing continuous delivery on Azure include Azure Pipelines, Azure DevOps Services, and GitHub Actions. The practice aligns with the DevOps principle of reducing silos between development and operations. In an enterprise context, continuous delivery supports compliance and auditability because every release is traceable through the pipeline logs and approval records.
It also enables techniques like canary releases, blue-green deployments, and feature flags because the release process is standardized and repeatable. The Azure AZ-400 exam specifically covers the design and implementation of release strategies as part of the 'Implement release management' objective domain. Candidates must understand how to configure multi-stage YAML pipelines in Azure Pipelines, integrate approval gates, and manage release variables and secrets.
Real-Life Example
Imagine you own a small restaurant that serves gourmet pizzas. Every morning, you prepare fresh dough, slice vegetables, and grate cheese. You keep everything in the fridge, ready to go.
When a customer orders a pizza, you just take the prepped ingredients, assemble the pizza, and bake it. You could also have a system where you bake a few pizzas in advance and keep them warm, ready to serve immediately. This is continuous delivery.
In software terms, the prepped ingredients are like the code that has been built and tested. The fridge or warmer is the staging environment. The final step of baking or serving is the manual decision to release to production.
Without continuous delivery, you would start from scratch every time an order came in. You would have to grow the wheat, mill the flour, make the dough, and grate the cheese each time. That would take a long time and lead to mistakes.
With continuous delivery, you do the hard work of preparation once, automate it, and keep everything ready. When the business owner decides it is time to release a new menu item (a new feature), they can do it quickly because all the prep work is already done. You can even test the new pizza by offering it to a few tables (canary release) before adding it to the main menu for everyone.
This reduces the risk of a bad rollout and keeps customers happy because they get consistent, high-quality food quickly.
Why This Term Matters
In practical IT, continuous delivery matters because it directly addresses the high costs and risks associated with manual software releases. Traditional release processes often involve dedicated release windows, late-night deployment calls, and manual steps like copying files, running scripts, and updating databases. These manual processes are error-prone and slow.
A single misconfigured step can cause downtime, data loss, or security vulnerabilities. Continuous delivery eliminates these risks by automating the entire release pipeline, ensuring every change is validated and ready. This allows IT teams to release updates more frequently, sometimes multiple times per day, without increasing the risk of failure.
For businesses, this translates into faster time-to-market for new features, quicker bug fixes, and improved customer satisfaction. It also reduces the cognitive load on operations teams because deployments become routine, low-stress events rather than high-anxiety emergencies. From a compliance perspective, continuous delivery provides a clear audit trail of every change, including who approved what and which tests passed.
This is critical for regulated industries like finance or healthcare, where audits require proof of controlled releases. Continuous delivery enables modern architectural patterns like microservices, where each service can be updated independently. Without CD, coordinating releases across hundreds of microservices would be impossible.
Finally, continuous delivery supports a culture of experimentation. Since it is easy to release changes, teams can run A/B tests, gradually roll out features, and quickly roll back if something goes wrong. This leads to better software and more innovation.
How It Appears in Exam Questions
In the AZ-400 exam, continuous delivery appears in several question patterns. The most common type is scenario-based: the question describes a software team with specific needs, and you must choose the best release strategy. For example, 'A company wants to automate all steps up to production but still requires a human to click deploy.
Which practice should they implement?' The correct answer is continuous delivery. Another pattern involves pipeline configuration: you are given a YAML snippet with missing stages or incorrect dependencies, and you must identify the fix.
For instance, the snippet might have a build stage that produces an artifact, but the release stage does not reference the artifact correctly. You would need to add an artifact download step. A third pattern is troubleshooting: the question might say that a release to staging failed because the database migration script ran out of order.
You must identify that the pipeline should include a separate database migration step before the application deployment or use tools like Flyway or Entity Framework migrations in the pipeline. Another common pattern is about approval gates: the question might describe a scenario where a manager must approve releases to production. You need to know how to configure an environment in Azure Pipelines with required approvers.
Questions may also ask about artifact versioning: for example, 'A team uses semantic versioning for their NuGet packages. How should they configure the pipeline to automatically increment the version?' The answer would involve using a versioning task or a script that reads the version from a file.
You might also see questions that differentiate between continuous delivery and continuous deployment, especially when a scenario mentions automatic release to production. Questions about release strategies might ask: 'Which deployment method allows you to route a small percentage of traffic to the new version before full rollout?' The answer is canary release, which is enabled by a mature continuous delivery pipeline.
Study AZ-400
Test your understanding with exam-style practice questions.
Example Scenario
The IT team at a large retail company uses Azure DevOps for their e-commerce platform. They currently release updates once a month using a manual process where the operations team manually copies build artifacts to the server and runs scripts. This process often leads to errors, and the team is afraid to release new features.
They decide to implement continuous delivery. The team sets up an Azure Pipeline with multiple stages. First, the build stage compiles the code, runs unit tests, and creates a Docker image.
The image is stored in Azure Container Registry. Next, the pipeline automatically deploys the new image to a staging environment that mirrors production. In staging, automated integration tests and UI tests run against the new image.
If all tests pass, the pipeline pauses and sends a notification to the release manager asking for approval. The release manager reviews the test results and, if satisfied, clicks the 'Approve' button. The pipeline then deploys the same Docker image to production using a blue-green deployment strategy, where the new version runs alongside the old one.
After monitoring for 15 minutes with no errors, the pipeline automatically switches all traffic to the new version. After implementing this continuous delivery pipeline, the team is able to release updates twice a week with confidence. The manual errors disappear, and the business is happy because new features reach customers faster.
Common Mistakes
Thinking that continuous delivery means automatic production releases
Continuous delivery makes every change deployable but requires manual approval for production. Automatic production release is continuous deployment, which is a separate practice.
Remember that CD with manual gate = continuous delivery, no gate = continuous deployment.
Skipping the staging environment and deploying directly from build to production
The staging environment is critical for validating the release candidate in a production-like setting. Skipping it increases the risk of undetected issues reaching production.
Always include at least one non-production environment in the pipeline for integration and smoke tests before production.
Assuming that continuous delivery eliminates the need for testing
Continuous delivery relies heavily on automated testing. If tests are incomplete or poorly written, bugs will still reach production. CD does not replace testing; it automates its execution.
Invest in a robust test suite that includes unit, integration, and end-to-end tests. Regularly review test coverage and flaky tests.
Configuring the pipeline to run only when triggered manually
Continuous delivery thrives on automation. A manual trigger defeats the purpose of continuous integration and delivery, as changes are not automatically validated.
Set the pipeline to trigger automatically on commits to the main branch, but require manual approval for the production stage.
Forgetting to version artifacts consistently
Without versioning, it becomes impossible to trace which code was deployed or roll back to a previous version. This breaks auditability and recovery.
Use semantic versioning, date-based versions, or build numbers. Store artifacts in a versioned repository like Azure Artifacts.
Exam Trap — Don't Get Fooled
{"trap":"A question describes a team that wants every code change to be automatically deployed to production after passing automated tests, and asks 'Which practice does this describe?' The options include 'continuous delivery' and 'continuous deployment.' Many learners choose 'continuous delivery' because it sounds similar."
,"why_learners_choose_it":"The terms are very similar, and learners often confuse delivery with deployment. They may think 'delivery' includes getting the code to users.","how_to_avoid_it":"Remember the key difference: delivery = ready to deploy, but not automatically deployed.
Deployment = automatically sent to production. If the scenario says 'automatically to production,' it is continuous deployment."
Step-by-Step Breakdown
Code Commit
A developer pushes code changes to a shared repository (e.g., Azure Repos, GitHub). This triggers the CI/CD pipeline automatically, ensuring every change is processed immediately.
Continuous Integration (Build and Unit Tests)
The pipeline compiles the code, runs unit tests, and performs static code analysis. If any test fails or the build breaks, the pipeline stops and alerts the team. This stage ensures the code is functional at a granular level.
Artifact Packaging
If the build succeeds, the pipeline packages the application into a deployable artifact, such as a Docker image, a zipped web app, or a compiled binary. The artifact is versioned and published to a repository like Azure Artifacts.
Deploy to Staging Environment
The pipeline automatically deploys the artifact to a staging environment that mirrors production. This environment includes infrastructure provisioned via IaC. Automated integration, security, and performance tests run against this environment.
Manual Approval Gate (Pre-Production)
After all tests pass in staging, the pipeline pauses. It sends a notification to designated approvers (e.g., release manager, QA lead) who review the test results and approve or reject the release. This is the key difference from continuous deployment.
Deploy to Production
Upon approval, the pipeline deploys the same artifact to the production environment. This may use a blue-green, canary, or rolling update strategy to minimize downtime and risk. The deployment step itself is automated, but it only runs after approval.
Practical Mini-Lesson
In practice, implementing continuous delivery requires more than just setting up an Azure Pipeline. You need a mature testing strategy. Unit tests are fast but catch only logic errors.
Integration tests check that components work together, and end-to-end tests verify user flows. A common mistake is relying only on unit tests, which leads to bugs slipping through the pipeline. Professionals use test pyramid principles: many unit tests, fewer integration tests, and even fewer e2e tests.
Another critical aspect is managing configuration. Environment-specific values like connection strings, API keys, and feature flags should not be hardcoded into the artifact. Instead, use Azure App Configuration, Azure Key Vault, or pipeline variables to inject settings at deployment time.
This ensures the same artifact can be deployed across dev, staging, and production without recompilation. Secrets must be handled securely; never commit secrets to source control. Use Azure Key Vault with managed identities in the pipeline to retrieve secrets at runtime.
Another common concern is database changes. Database migrations must be included in the pipeline. Tools like Flyway, Liquibase, or Entity Framework migrations can run scripts as part of the deployment.
The key is to ensure that database changes are reversible and that the application code is backward-compatible with the previous database version. This allows for safe rollbacks. Infrastructure as code (IaC) is also essential.
Without IaC, staging environments may drift from production, leading to 'it works on my machine' problems that surface only in production. Use ARM templates, Bicep, or Terraform to provision environments consistently. Finally, monitoring and feedback loops complete the CD pipeline.
After deploying to production, the pipeline should trigger automated smoke tests and send telemetry to Azure Monitor or Application Insights. If error rates spike, the team should be alerted immediately, and the pipeline should support automated rollback. A well-tuned CD pipeline reduces mean time to recover (MTTR) and increases overall system reliability.
Memory Tip
Delivery = Doorman. The code is ready at the door, but the doorman (human approval) must open it. Deployment = Door opens automatically.
Covered in These Exams
Current Exam Context
Current exam versions that test this topic — use these objectives when studying.
Related Glossary Terms
A/B testing is a controlled experiment that compares two versions of a single variable to determine which one performs better against a predefined metric.
5G is the fifth generation of cellular network technology, designed to deliver faster speeds, lower latency, and support for many more connected devices than previous generations.
AAA (Authentication, Authorization, and Accounting) is a security framework that controls who can access a network, what they are allowed to do, and tracks what they did.
Frequently Asked Questions
What is the difference between continuous delivery and continuous deployment?
Continuous delivery means every change is automatically built, tested, and prepared for release, but a human must approve the final production deployment. Continuous deployment automates the release to production as well, with no manual step.
Do I need continuous integration to use continuous delivery?
Yes. Continuous delivery builds on top of continuous integration. You must first have automated builds and tests (CI) before you can automate the release pipeline (CD).
Can continuous delivery be used with legacy applications?
Yes, but it may require significant refactoring to break the monolithic application into deployable components. You can start with automating the build and test steps, then gradually add release automation.
What testing is required for continuous delivery?
You need a comprehensive test suite including unit tests, integration tests, end-to-end tests, and security scans. The tests must be reliable and fast enough to run within the pipeline without blocking the team.
Is continuous delivery only for cloud applications?
No. While cloud environments make it easier, you can implement continuous delivery for on-premises applications using self-hosted agents in Azure DevOps, or tools like Jenkins and Octopus Deploy.
How does continuous delivery handle database changes?
Database migrations are included in the pipeline as automated scripts (e.g., Flyway, Entity Framework migrations). Changes are applied in a backward-compatible manner to support rollbacks.
Summary
Continuous delivery is a foundational DevOps practice that automates the process of getting code changes from a developer's workstation to a release-ready state. It ensures that every change is built, tested, and deployed to a staging environment automatically, with the final production release requiring a manual approval. This practice reduces the risk, cost, and stress of software releases, allowing teams to deliver updates to users frequently and reliably.
For the AZ-400 exam, understanding the distinction between continuous delivery and continuous deployment is critical, as well as knowing how to implement multi-stage release pipelines in Azure Pipelines, configure approval gates, and manage artifacts. Learners should focus on the automation of the release process, the role of testing, and the importance of infrastructure as code. By mastering continuous delivery, IT professionals not only pass certification exams but also bring tangible value to their organizations by enabling faster, safer software delivery.
Remember the memory tip: Delivery = Doorman. The code is ready at the door, waiting for a human to open it.