Continuous Delivery
Continuous delivery keeps software in a release-ready state through repeatable builds, checks, and deployment steps. A team can choose when to release a verified change; production deployment need not be automatic.
Continuous delivery is a way of working in which the team aims to keep its software ready for release. Changes are integrated regularly, built, and checked through automated tests and other quality controls.
A delivery pipeline moves a change through repeatable stages, such as building an artifact, running tests, and deploying to a test or staging environment. The pipeline should provide useful evidence about whether that change is safe to release.
The team can choose when to release a verified change, for example through a manual approval or a planned release window. Continuous delivery does not require every successful change to go straight to production; that automatic step is associated with continuous deployment.
Reliable delivery also depends on operational practices: small changes are easier to assess, deployments should be repeatable, and teams need ways to monitor a release and recover if it causes problems. The exact pipeline varies by system and risk.
Key points
- The aim is to keep software ready for release, not merely to run a build once.
- Automated validation and repeatable deployment reduce manual variation.
- Continuous delivery can include a human or policy-controlled production release.
- Small changes, monitoring, and recovery plans support safer releases.
Interview questions
What is continuous delivery?
Continuous delivery is a practice of keeping software ready to release through a repeatable, automated process. Changes are integrated and checked with builds, tests, and other appropriate quality controls. A verified change can then be deployed when the team or release policy chooses. It does not necessarily mean every change is automatically sent to production.
How is continuous delivery different from continuous integration?
Continuous integration is about merging changes frequently and validating them with automated checks. Continuous delivery builds on that by taking validated changes through a process that keeps them ready to release. CI can catch integration problems, while delivery addresses the path from a change to a deployable release. CI is therefore an important foundation, but it does not by itself establish a release process.
What is the difference between continuous delivery and continuous deployment?
Continuous delivery keeps changes ready for production but allows a person or policy to decide when a production release happens. Continuous deployment removes that separate release decision for qualifying changes and deploys them automatically. Both depend on reliable validation and deployment processes. The choice depends on operational needs, risk, and the team's ability to detect and respond to problems.
How would you begin introducing continuous delivery for a Python backend service?
I would first make the build and test steps repeatable, then have the pipeline run them whenever changes are integrated. Next, I would produce a versioned artifact and deploy it to a representative non-production environment for further checks. I would make the production deployment repeatable and ensure the team can observe the release and recover from a bad outcome. I would start with appropriate checks and controls for the service rather than treating one pipeline design as suitable for every system.