Continuous deployment in 5 easy steps
radar.oreilly.com
radar.oreilly.com
I sometimes have merged a large feature into the repo's trunk (thousands of lines of code) - and it seems a bit scary to automatically deploy something that large into production (even with adequate testing). Although, I would like deploying onto a test server/vm automatically.
In my experience, changes to the production service have always been manual. Has anyone ever tried having commits automatically deploy to production (when they pass unit tests)?
Don't. Commit early, often and in small chunks. Just search for Continuous Integration, more than enough has been said on it already.
When you must, roll out features independently of the code being live in production. This means things like using control logic to roll out the code to portions of users, intelligently. We roll out via: on/off switches (mitigate total failure), A/B tests (mitigate poor performance in front of customers), QA-rollout (mitigate bad experiences for customers), etc. Lots of flexibility here, including hidden rollouts: running the code without showing the results to users, so you can figure out scalability impacts.
Beyond the benefits of just automating deployment (independent of source control and continuous integration), it's convenient to use source control as a historical record about the state of the production systems, and it's good not to have to remember rarely-used combinations of parameter values in deployment scripts.
Continuous Deployment at IMVU: Doing the impossible fifty times a day. http://news.ycombinator.com/item?id=475017