Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.
You're doing continuous delivery when:
- Your software is deployable throughout its lifecycle.
- Your team prioritizes keeping the software deployable over working on new features.
- Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them.
- You can perform push-button deployments of any version of the software to any environment on demand.
The key test is that a business sponsor could request that the current development version of the software can be deployed into production at a moment's notice, and nobody would bat an eyelid, let alone panic.
ImplementationsBuild, Deployment, and Environment Provisioning.
We achieve all this by ensuring our code is always in a deployable state, even in the face of teams of thousands of developers making changes on a daily basis. Every developer should have his/her own production environment for testing deployability.
- Continuously integrating the software done by the development team, building executables, and running automated tests.
- Push the executables into increasingly production-like environments to ensure the software will work in production. DeploymentPipeline.
To achieve continuous delivery you need:
- a close, collaborative working relationship between everyone involved in delivery (often referred to as a DevOpsCulture). Test, support, development and operations work together as one delivery team to automate and streamline the build, test and release process.
- extensive automation of all possible parts of the delivery process, usually using a DeploymentPipeline
Deploy to a subset of users
User feedback does require you to be doing continuous deployment. If you want that, but don't fancy getting new software to your entire user base, you can deploy to a subset of users. For example, deploy the system orderly to:
- an invited set of premium customers.
- all customers.
Continous Deployment means that every change goes through the pipeline and automatically gets put into production, resulting in many production deployments every day. Continuous Delivery just means that you are able to do frequent deployments but may choose not to do it, usually due to businesses preferring a slower rate of deployment. In order to do Continuous Deployment you must be doing Continuous Delivery.
The principal benefits of continuous delivery are:
- Reduced Deployment Risk: since you are deploying smaller changes, there's less to go wrong and it's easier to fix should a problem appear.
- Believable Progress: many folks track progress by tracking work done. If "done" means "developers declare it to be done" that's much less believable than if it's deployed into a production (or production-like) environment.
- User Feedback: the biggest risk to any software effort is that you end up building something that isn't useful. The earlier and more frequently you get working software in front of real users, the quicker you get feedback to find out how valuable it really is (particularly if you use ObservedRequirements).