2. ABOUT ME
Mike McGarr
Director of Learn DevOps
Blackboard Inc.
michael.mcgarr@blackboard.com
I have been at Blackboard for 8 months.
Software Engineer for 12+ years
Founder of the DC Continuous
Integration, Delivery and Deployment Meetup
3. WHAT WE ARE GOING
TO LEARN TODAY
Overview of Continuous Delivery
Why everybody should care
Where to get started
Sneak Peek at some tools/techniques
5. WHY ARE RELEASES
HARD?
They break things
This is production, so we have
to be careful
They don’t always work
A lot changed, so we need to
verify everything is ok
In-Frequent
Releases
8. A DAY AT THE BEACH
Releases
should be a
Non-Event
9. THE LAST MILE
Manual Deployments
Insufficient Configuration Management
Infrequent, Error Prone Deployments
10. WHAT IS CONTINUOUS
DELIVERY?
“Continuous delivery is a set
of practices and principles
aimed at, building, testing
and releasing software
faster and more frequently”
cycle time
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
16. APPLYING CONTINUOUS
DELIVERY
Principles:
• Improve continuously
• Releasing software MUST be
repeatable and reliable
• Automate everything!
• If it hurts, do it more often
• Keep everything in version
control
• Done means “released”
• Build quality in!
• Everybody has responsibility for
the release process Agile (Lean)
Configuration
Management
Continuous
Integration
Testing
Deployment Pipelines
Continuous Deployment
Deployment Automation
Practices:
23. VERSION CONTROL
23
• Version Everything
• Tool should stay out of the
way
• Good Branching Strategy
• Don’t check-in binary files
24. 24
AUTOMATE THE BUILD
• No IDE Builds!
• KISS
• Fail Fast (but smartly)
• No Wiki’s to Build
• Pick an appropriate Technology
• Keep it organized
• Dependency Management
35. 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
35
36. HOW TO GET
STARTED
Continuous Integration on a Dollar a Day by James Shore
(http://bit.ly/13CUiVn)
Setup:
1. Old Computer
2. Rubber Chicken
3. Desk Bell
4. Automated Build
5. Drink the Kool-Aid
6. Launch
How it works:
1. Run build locally
2. Take Rubber Chicken
3. Get latest from SCM
4. Check-in code
5. Check-out on Old Computer
6. Run build on old computer
• If it fails, revert changes
7. Ring bell if passes
37. CI SERVERS
• Human Proof
• Build per commit
• Notifications (Email alerts, RSS, etc.)
• Dashboards & Charts
• Plugins and Integrations
• Historical Data
• Web Accessible
44. 44
DEPLOYMENT PIPELINES
A Deployment Pipeline is an automated
manifestation of your process for getting
software from version control into the
hands of your users.
52. THANK YOU!
Mike McGarr
Director of Learn DevOps
Blackboard Inc
michael.mcgarr@blackboard.com
http://earlyandoften.wordpress.com
@jmichaelmcgarr
53. 53
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
• Continuous Integration, By Paul M Duvall -
http://www.amazon.com/Continuous-Integration-Improving-Software-
Reducing/dp/0321336380
• Refactoring Databases, By Scott Ambler and Pramod Sadalage -
http://www.amazon.com/Refactoring-Databases-Evolutionary-paperback-
Addison-Wesley/dp/0321774515
• Refactoring, By Martin Fowler - http://www.amazon.com/Refactoring-
Improving-Design-Existing-Code/dp/0201485672
• Growing Object-Oriented Software, Guided by Tests, by Steven Freeman and
Nat Pryce - http://www.amazon.com/Growing-Object-Oriented-Software-
Guided-Tests/dp/0321503627
54. 54
FURTHER READING
• Extreme Programming Explained, by Kent Beck -
http://www.amazon.com/Extreme-Programming-Explained-Embrace-
Change/dp/0201616416
• Release It!, by Michael Nygard - http://pragprog.com/book/mnee/release-it
• xUnit Test Patterns, by Gerard Meszaros - http://www.amazon.com/xUnit-
Test-Patterns-Refactoring-Code/dp/0131495054
• Working Effectively with Legacy Code, by Michael Feathers -
http://www.amazon.com/Working-Effectively-Legacy-Michael-
Feathers/dp/0131177052
• Agile Testing, by Lisa Crispin and Janet Gregory -
http://www.amazon.com/Agile-Testing-Practical-Guide-
Testers/dp/0321534468
55. 55
FURTHER READING
• 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/
• Implementing Lean Software Development, by Mary and Tom Poppendieck -
http://www.amazon.com/Implementing-Lean-Software-Development-
Concept/dp/0321437381
56. 56
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
57. 57
FURTHER READING
• Branch by Abstraction, by Paul Hammant
http://paulhammant.com/blog/branch_by_abstraction.html
• Making Large Scale Changes Incrementally with Branch by Abstraction, by Jez
Humble - http://continuousdelivery.com/2011/05/make-large-scale-changes-
incrementally-with-branch-by-abstraction/
• What is DevOps?, by Damon Edwards - http://dev2ops.org/2010/02/what-is-
devops/
• Monitoring Sucks - https://github.com/monitoringsucks
Software Releases are painfulThey can take up hours or days to completeThey tend to eat into our personal livesNote: A release is defined as any change to a production system
Let’s use an exampleThe family vacation!Once a yearMust be relaxingHas to be perfecthttp://www.sun-shots.com/data/photos/824_1family_professional_beach_portrait_photography.jpg
Have you ever had a family vacation ruined?If something goes wrong, the whole vacation could be ruined
Lives near the beachGoes everydayIf something goes wrong, no worriesA day at the beach is almost a non-eventhttp://www.tairiretreats.com/#/surfing/4555515307