These are slides I used to present to the DC Continuous Integration, Delivery and Deployment User Group on
Writing code is fun, but deploying to production is not. Production releases are scary events that last all weekend, and you find yourself worrying about how it will go. Did we miss a configuration file? Is the database schema the same as the one in the test environment? Does the last minute hot fix we just applied break any other features? Did I forget to include an installation instruction for the system administrators?
Continuous Delivery is a collection of principles and practices aimed at addressing the problems teams typically face when releasing changes to production. By applying rigorous automation, testing and configuration management, teams are able to confidently and consistently deploy changes from version control to production without fear.
In this talk, Mike McGarr will provide listeners with an introduction into the world of Continuous Delivery. After an introduction into the concepts and principles of Continuous Delivery, he will discuss many of the techniques for implementing Continuous Delivery and recommend some tools that can be used on your development project.
4. Upcoming Events
• October 15th – Continuous Delivery in the
Cloud Case Study (Paul Duvall)
• November 7th – Anatomy of a Build
Pipeline (Sam Brown)
• December 13th – Finalizing Speaker
4
6. About Me
• J. Michael (Mike) McGarr
• Excella Consulting, Arlington VA
• Lead of Excella’s Java Center of Excellence
• Founder of the DC Continuous Integration,
Delivery, and Deployment Meetup
6
7. Continuous Delivery is…
…a set of practices and principles aimed at,
building, testing, and releasing software
faster and more frequently.
7
9. “Our highest priority is to satisfy the
customer through early and
continuous delivery of valuable
software.”
- First of the Twelve
Principles behind the Agile Manifesto
9
11. Cycle Time
“How long would it take your organization to
deploy a change [to production] that involves
just one single line of code? Do you do this on a
repeatable, reliable basis?”
- Mary and Tom Poppendieck,
Implementing Lean Software Development
11
12. The Last Mile
Manual Deployments
Insufficient Configuration Management
Infrequent, Error Prone Deployments
12
18. Deployment Pipelines
A Deployment Pipeline is an automated
manifestation of your process for getting
software from version control into the
hands of your users.
18
34. Continuous Integration
Check-in Daily
Commit to Trunk
Automate the Build
Keep the Build Fast
Every Commit results in Build
Test in Clone of Production
Automate Deployment
34
59. Further Reading
• Continuous Delivery: Reliable Software Releases through Build, Test
and Deployment Automation, by Jez Humble and David Farley -
http://www.amazon.com/Continuous-Delivery-Deployment-Automation-
Addison-Wesley/dp/0321601912
• Test Driven Development (TDD) – http://en.wikipedia.org/wiki/Test-
driven_development
• Introducing BDD, by Dan North – http://dannorth.net/introducing-bdd/
• Agile Manifesto – http://agilemanifesto.org/
• Scrum – http://www.scrumalliance.org/learn_about_scrum
• Continuous Integration, by Martin Fowler –
http://martinfowler.com/articles/continuousIntegration.html
• Specification by Example, by Gojko Adzic -
http://specificationbyexample.com/
• Build Pipelines - http://www.magpiebrain.com/2009/12/13/a-brief-and-
incomplete-history-of-build-pipelines/
59
60. Further Reading
• Maven Releases on Steriods, by Axel Fontaine –
http://www.axelfontaine.com/2011/01/maven-releases-on-steroids-
adios.html
• What is in a Name? Usually a version number, actually., by James
Betteley - http://jamesbetteley.wordpress.com/2011/07/07/what-is-in-a-
name-usually-a-version-number-actually/
• Build Once, Deploy Many -
http://earlyandoften.wordpress.com/2010/09/09/build-once-deploy-
many/
• Evolutionary Design - http://martinfowler.com/articles/designDead.html
• Continuous Deployment -
http://timothyfitz.wordpress.com/2009/02/08/continuous-deployment/
• Sonar’s Technical Debt Calculation -
http://www.sonarsource.org/evaluate-your-technical-debt-with-sonar/
• Gherkin - https://github.com/cucumber/cucumber/wiki/Gherkin
60
The Last Mile tends to be an obstacle to achieving thisTransition – why are automated deployment so important? Because a feature doesn’t add value until it is in production.
Collaboration (DEV + Customer, DEV + Operations)Talking early and often…break down walls. [DevOps]Automation. Automate Everything! Build, Test, Deploy!Frequency. Frequent means small. Easier to troubleshoot, rollback. Reduces Risk.Feedback. Change triggers feedback. Feedback is fast. Team acts on it.