At my current client, we've been overhauling our CI process to enable us to work towards continuous deployment.
Currently, a deployment only happens every few weeks which is a pain for our users (this is an internal line of business system), so we're working hard to get releases going on a regular basis, and possibly continuously.
My understanding of the difference is as follow:
- Ensuring that code can be rapidly and safely deployed to production when needed
- Every change is deployed to a production-like environment
- Rigorous automated testing is done against the production-like environment
- We have confidence that we can click one button to trigger an automated deployment into Production when business is ready to accept the changes
- This removes the manual deployment step in the process above
- Changes go straight into production when all acceptance tests pass on the production like deployment
The author of the post specifies that ideally we should aim for the second option, but admits that in many businesses its just not possible. In those cases, aim for option 1 (with the manual step).
I quite like that approach, I can't say I've ever worked on a system where the users would tolerate going down many times a day just to get the latest code fresh off the presses. I can see there may be some systems where it would work, I've just never worked on one.
Please share your experiences and opinions in the comments. I will raise this topic at the Entelect presentation on Friday and maybe do a follow up post with any new insights I gain.
Update: Saw this tweet from Martin Fowler that seems to convey the same differentiation
Continuous Delivery means you ensure every change can be deployed to production. Continuous Deployment means you deploy every change.— Martin Fowler (@martinfowler) May 14, 2015