Continuous DeliveryApplied
Mike [email protected]@jmichaelmcgarrhttp://earlyandoften.wordpress.com http://www.meetup.com/DC-continuous-integration/
• J. Michael (Mike) McGarr
• 11 years as an IT consultant
• Director of DevOps for Learn, Blackboard
• Founder of the DC Continuous Integration, Delivery, and Deployment Meetup
About Me
2
…a set of practices and principles aimed at, building, testing, and releasing software faster and more frequently.
3
Continuous Delivery is…
4
5
“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
6
Quality or Speed
7
“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
8
Cycle Time
9
The Last Mile
Manual Deployments
Insufficient Configuration Management
Infrequent, Error Prone Deployments
10
Stressful Releases
11
Frequent Automated Deployments
http://flic.kr/p/29Ree
12
Always Production Ready
13
Agile
ConfigurationManagement
Continuous Integration Testing
Deployment Pipelines
Continuous Deployment
Deployment Automation
14
Deployment Pipelines
http://www.fotopedia.com/users/chmehl
15
Deployment Pipelines
A Deployment Pipeline is an automated manifestation of your process for getting software from version control into the hands of your users.
16
Deployment Pipelines(aka Build Pipelines)
17
Continuous what?
ContinuousDelivery
ContinuousDeployment
ContinuousIntegration
Where do I start?
19
Understand your Process
http://www.michaelnygard.com/blog/2008/02/outrunning_your_headlights.html
20
Understand your Organization
21
Developers
http://flic.kr/p/5cK2
22
Test Driven Development
http://reddevnews.com/articles/2007/11/01/testdriven-development-tdd.aspx
23
Evolutionary Design
24
Automate the Build
25
Static Code Analysis
CheckStyle
26
Technical Debt
27
The Team
28
Agile
29
Continuous Integration
30
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
31
Build Pipeline in Jenkins
32
Testing
33
Types of Tests
34
Test Strategy
Taken from Growing Object-Oriented Software, Guided by Tests
35
Testing is not a Phase
http://flic.kr/p/6bcg
36
Specification by Example
37
Specification by Example
38
Automated Performance Testing
39
Configuration Management
Version Control
40
41
Build Once, Deploy Many
Externalize Configuration
42
ESCAPE Database
Artifact Repositories
43
44
Traceability
45
Versioning Numbers
Branch by Abstraction
46
47
Deploying
48
Automated Deployments
Code Deployments
49
1. Push New Binary to Server2. Stop Server3. Archive Old Binary4. Deploy New Binary5. Start Server
Version your Database
50
Database Deployments
51
VersionControl
DBChange
DBChange
DB Change
BuildServer
Production
Test
Dev
.sqlHTML
DBA
52
DevOps
53
http://www.agileweboperations.com/lean-agile-devops-related
DevOps: it’s about culture
54
http://dev2ops.org/2012/10/devops-transformation-workshop-for-technical-managers/
Infrastructure as Code
55
56
Puppet
Vagrant
57
58
Monitoring (sucks)
https://github.com/monitoringsucks
59
Continuous Deployment
60
Contact Me
Mike McGarr
@jmichaelmcgarr
http://earlyandoften.wordpress.com
61
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
62
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
63
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
64
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
65
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
66
Tools• Git - http://git-scm.com/• Subversion - http://subversion.tigris.org/• Mercurial - http://mercurial.selenic.com/• Rational ClearCase -
http://www-01.ibm.com/software/awdtools/clearcase/• Serena Dimensions CM -
http://www.serena.com/products/dimensions-cm/index.html• Ant - http://ant.apache.org/• Ivy - http://ant.apache.org/ivy/• Maven - http://maven.apache.org/• Gradle - http://gradle.org/• JUnit – http://www.junit.org/• Mockito – http://code.google.com/p/mockito/• Hamcrest – http://code.google.com/p/hamcrest/• Spock – http://code.google.com/p/spock/• dbUnit – http://www.dbunit.org/• Unitils – http://unitils.org/summary.html
67
Tools• Findbugs – http://findbugs.sourceforge.net/• PMD – http://pmd.sourceforge.net/• Checkstyle – http://checkstyle.sourceforge.net/• JIRA – http://www.atlassian.com/software/jira/overview• GitHub – https://github.com/• Jenkins - http://jenkins-ci.org/• TeamCity – http://www.jetbrains.com/teamcity/• Nexus – http://www.sonatype.org/nexus/• Artifactory – http://www.jfrog.com/products.php• Sonar – http://www.sonarsource.org/• FitNesse – http://fitnesse.org/ • Concordion – http://www.concordion.org/• Cucumber – http://cukes.info/• easyb – http://www.easyb.org/• jBehave - http://jbehave.org/• geb - http://www.gebish.org/
68
Tools• Liquibase – www.liquibase.org/ • Flyway – http://code.google.com/p/flyway/• Escape – http://code.google.com/p/escservesconfig/• Capistrano - https://github.com/capistrano/capistrano • Deployinator - https://github.com/etsy/deployinator • Puppet – http://puppetlabs.com/• Chef – http://www.opscode.com/chef/• Ansible - http://ansible.cc/ • Vagrant – http://vagrantup.com/• JMeter – http://jmeter.apache.org/• Nagios - http://www.nagios.org/• Logstash - http://logstash.net/ • StatsD – https://github.com/etsy/statsd • Metrics – http://metrics.codahale.com/ • Ganglia – http://ganglia.sourceforge.net/ • Graphite - http://graphite.wikidot.com/