Continuous Delivery “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.” http://martinfowler.com/bliki/ContinuousDelivery.html
Continuous Delivery (cont.) “You achieve continuous delivery by continuously integrating the software done by the development team, building executables, and running automated tests on those executables to detect problems.” http://martinfowler.com/bliki/ContinuousDelivery.html
✓ Development ✓ Source code review ✓ Continuous integration ✓ Production test ✓ Production Source Code Review Continuous Integration Production Test Developement Production GitHub Git Repository merge pull req pull tag deploy deploy Deployment Pipeline
Development Environment Developer Machine Redis Shared Development MySQL EC2 Ruby on Rails memcached Remote Spec Workers remote_spec worker remote_spec worker
GitHub Enterprise LAN Tokyo Tyrant Development App Server push rspec deploy HipChat
GitHub Flow ✓ Anything in the master branch is deployable ✓ To work on something new, create a descriptively named branch off of master (ie: new-oauth2-scopes) ✓ When you need feedback or help, or you think the branch is ready for merging, open a pull request ✓ After someone else has reviewed and signed off on the feature, you can merge it into master http://scottchacon.com/2011/08/31/github- ow.html
Feature Toggle “The basic idea is to have a con guration le that de nes a bunch of toggles for various features you have pending. The running application then uses these toggles in order to decide whether or not to show the new feature.” http://martinfowler.com/bliki/FeatureToggle.html
Source Code Flow LAN EC2 CI Server Git Repository Production Test HipChat tag pull notify deploy Development DB schema Remote Spec distribute Git Repository clone pusher service hook pull push Developer merge
CI Servers CI Master CI Slave CI Slave CI Slave CI Slave CI Slave Remote Spec Worker Remote Spec Worker Remote Spec Worker Remote Spec Worker Remote Spec Worker Remote Spec Worker Remote Spec Worker Remote Spec Worker CI Slave
Source Code Flow LAN EC2 CI Server Git Repository Production Test HipChat tag pull notify deploy Development DB schema Remote Spec distribute Git Repository clone pusher service hook pull push Developer merge
Application Server Deploy Server deploy CI Server HipChat Blog & Wiki Git Repository Developer Machine SSH notify post pull assets LAN EC2 Deployment Server