Continuous Deployment
Continuous Integration
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.
Continuous Deployment
Continuous Delivery is the natural extension of Continuous Integration: an approach in which teams ensure that every change to the system is releasable, and that we can release any version at the push of a button. Continuous Delivery aims to make releases boring, so we can deliver frequently and get fast feedback on what users care about.
-- Martin Fowler, ThoughtWorks - http://www.thoughtworks.com/continuous-delivery
What does this mean in practice?
- Every commit is potentially releasable
- Absolutely everything must be covered by tests
- Requires a skilled team, defined workflow and some technical infrastructure
- This is our "continuous deployment pipeline"
- We're building it incrementally and it's not done yet
Our pipeline
- CB system broken into multiple, small services
- Each in its own Github repository
- Each with a rigorous set of tests
- Jenkins CI server whose job is to run those tests on every Github commit
- When "green", a deployable artefact is produced
- In our case a Docker container
- We have all this already
Our pipeline
- A collection of Docker containers that have passed tests is not sufficient.
- How do we know all the components work together?
- We apply configuration to those artefacts; how do we know it will all work in production?
- How does it actually get deployed?
What we haven't finished yet
- "Non-Functional Testing" environment
- Load/performance testing, benchmarking, etc.
- Probably not run on every commit
- "System Integration" environment
- New "green" artefact is thrown into a production-like environment and run some sanity checks
- "Deployment bot"
- The midwife for new artefacts
Where are we today?
- Good per-service tests
- We know our code works. Room for improvement though
- No SI environment
- We're not sure if everything is configured correctly for production & will work together
- No NF environment
- Not a big deal in T&L- this is about scale
- Manual deployments; sometimes accidental deployments
What are the benefits of C.D.?
- Detect errors quickly
- Fast turn-around time
- No big "doomsday" of scheduled releases
- Verifiable quality
- This should really be obvious....
What are the benefits of C.D.?
-->
Less this
Moar this
The finished pipeline
Continuous Deployment
By Luke Bond
Continuous Deployment
- 1,358