TL;DR
Continuous delivery is a software engineering approach that automates the process of getting software updates of all types—including new features, configuration changes, bug fixes and experiments—into production safely and quickly in a sustainable way.
Concept
Continuous delivery is a practice that enables organizations to build, test and release software faster and more reliably by automating the delivery pipeline. It is an extension of continuous integration, where code changes are automatically built, tested and prepared for release to production.
Key aspects of continuous delivery include:
-
Automated Deployment: The entire software release process is automated, from building and testing to staging updates. The final decision to deploy to production is made by the developer.
-
Deployment Readiness: Every code revision that is committed triggers an automated flow that builds, tests and prepares the update for release. The end result is always a deployment-ready build artifact that has passed through a standardized test process.
-
Comprehensive Testing: Continuous delivery enables teams to automatically run a wide range of tests, including unit tests, integration tests, UI tests, load tests, etc. This helps catch issues earlier in the development lifecycle.
-
Parallel Test Stages: There can be multiple, parallel test stages before a production deployment, such as staging and production environments. This allows for progressive validation of updates.
-
Reduced Manual Effort: By automating the build, test and deployment processes, continuous delivery frees up developers from manual, error-prone tasks and encourages behaviors that reduce the number of bugs deployed to customers.
-
Faster Time-to-Market: Continuous delivery enables teams to deliver updates to customers more quickly and frequently. When implemented properly, a new version can be deployed on-demand.
-
Reduced Risk: Automated testing and the ability to quickly roll back changes if needed makes deployments less risky. Techniques like blue-green deployments enable zero-downtime releases.
Continuous delivery is enabled by practices like continuous integration, test automation, infrastructure as code, and deployment automation. It is a key part of the DevOps movement, helping organizations deliver value to customers faster and more reliably.
However, continuous delivery is not just about the technical practices. It also requires a cultural shift towards collaboration, experimentation, and a focus on delivering customer value. Successful implementation involves people, process and technology working together.
By adopting continuous delivery, organizations can achieve benefits such as faster time-to-market, reduced costs, higher quality, and happier teams. However, it requires a sustained commitment to automation, testing, and continuous improvement. The payoff is the ability to rapidly and reliably deliver software that meets customer needs.