Continuous Delivery
                           Applied

Mike McGarr
jmcgarr@gmail.com
@jmichaelmcgarr
http://earlyandoften.wordpress.com
http://www.meetup.com/DC-continuous-integration/
About Me
• J. Michael (Mike) McGarr
• 11 years as a consultant, Excella Consulting
• Founder of the DC Continuous Integration,
  Delivery, and Deployment Meetup




                                                 2
Continuous Delivery is…

…a set of practices and principles aimed at,
building, testing, and releasing software
faster and more frequently.




                                           3
4
“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




                                                    5
Quality   or Speed



                     6
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




                                                      7
The Last Mile

        Manual Deployments
Insufficient Configuration Management
Infrequent, Error Prone Deployments



                                        8
Stressful
Releases




        9
Frequent Automated
Deployments




                     http://flic.kr/p/29Ree
                                       10
Always Production Ready




                          11
Continuous Deployment

           Deployment Pipelines

         Deployment Automation



Configuration   Continuous
Management
                                  Testing
                Integration


                   Agile

                                            12
Deployment Pipelines




http://www.fotopedia.com/users/chmehl   13
Deployment Pipelines

A Deployment Pipeline is an automated
manifestation of your process for getting
software from version control into the
hands of your users.




                     14
Deployment Pipelines
  (aka Build Pipelines)




                          15
Continuous what?


Continuous     Continuous   Continuous
Integration     Delivery    Deployment




                                     16
Where do I start?
Understand your Process




  http://www.michaelnygard.com/blog/2008/02/outrunning_your_headlights.html
                                                                       18
Understand your Organization




                               19
Developers




         http://flic.kr/p/5cK2
                                 20
Test Driven Development




http://reddevnews.com/articles/2007/11/01/testdriven-development-tdd.aspx   21
Evolutionary Design




                      22
Automate the Build




                     23
Static Code Analysis




       CheckStyle


                       24
Technical Debt




                 25
The Team




           26
Agile




        27
Continuous Integration




                         28
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

                                  29
Testing




          30
Types of Tests




                 31
Testing is not a Phase




                         http://flic.kr/p/6bcg   32
Specification by Example




                           33
Specification by Example




                           34
Automated Performance Testing




                                35
Configuration Management




                           36
Version Control




                  37
Build Once, Deploy Many




                          38
Externalize Configuration



 ESCAPE           Database




                             39
Artifact Repositories




                        40
Traceability




               41
Versioning Numbers




                     42
Branch by Abstraction




                        43
Deploying
        44
Deployment Pipelines
  (aka Build Pipelines)




                          45
Build Pipeline in Jenkins




                            46
Code Deployments




                   47
Version your Database




                        48
49
Infrastructure as Code




                         50
Puppet




         51
Vagrant




          52
Monitoring (sucks)




  https://github.com/monitoringsucks

                                       53
Continuous Deployment




                        54
Contact Me


Mike McGarr
jmcgarr@gmail.com
@jmichaelmcgarr
http://earlyandoften.wordpress.com




                                     55
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/


                                                                         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
• Branch by Abstraction, by Paul Hammat -
  http://paulhammant.com/blog/branch_by_abstraction.html
                                                                           57
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/
•   Findbugs – http://findbugs.sourceforge.net/
•   PMD – http://pmd.sourceforge.net/
•   Checkstyle – http://checkstyle.sourceforge.net/


                                                                        58
Tools
• Jenkins - http://jenkins-ci.org/
• Jenkins Performance Plugin – https://wiki.jenkins-
  ci.org/display/JENKINS/Performance+Plugin
• Jenkins Build Pipeline Plugin - https://wiki.jenkins-
  ci.org/display/JENKINS/Build+Pipeline+Plugin
• Nexus – http://www.sonatype.org/nexus/
• Artifactory – http://www.jfrog.com/products.php
• Sonar – http://www.sonarsource.org/
• Cucumber – http://cukes.info/
• Liquibase – www.liquibase.org/
• Flyway – http://code.google.com/p/flyway/
• Escape – http://code.google.com/p/escservesconfig/
• Capistrano - https://github.com/capistrano/capistrano
• Puppet – http://puppetlabs.com/
• Chef – http://www.opscode.com/chef/
• Vagrant – http://vagrantup.com/
• JMeter – http://jmeter.apache.org/
                                                          59
Tools
•   Nagios - http://www.nagios.org/
•   Logstash – http://logstash.net/
•   StatsD – https://github.com/etsy/statsd
•   Ganglia – http://ganglia.sourceforge.net/
•   Metrics – https://github.com/codahale/metrics
•   Graphite - http://graphite.wikidot.com/




                                                    60

Continuous Delivery Applied (AgileDC)

Editor's Notes

  • #8 Cycle Time is a measure of Continuous Delivery maturity
  • #9 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.
  • #10 Manual DeploymentsInsufficient Configuration ManagementInfrequent, Error Prone Deployments