DC Continuous
Integration, Delivery and
Deployment User Group
Thank you Excella Consulting




                               2
Excella is Hiring!




                     3
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
Continuous Delivery
      Applied

          Mike McGarr
          mike.mcgarr@excella.com
          http://earlyandoften.wordpress.com
          http://www.meetup.com/DC-continuous-
          integration/
          @jmichaelmcgarr
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
Continuous Delivery is…

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




                                           7
8
“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
Goals



Quality      Cycle Time


                          10
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
The Last Mile

        Manual Deployments
Insufficient Configuration Management
Infrequent, Error Prone Deployments



                                      12
Stressful
Releases




       13
Frequent Automated
Deployments




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




                          15
Continuous Deployment

           Deployment Pipelines

         Deployment Automation



Configuration   Continuous
Management
                                  Testing
                Integration


                   Agile

                                            16
Deployment Pipelines




http://www.fotopedia.com/users/chmehl   17
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
Deployment Pipelines
  (aka Build Pipelines)




                          19
Continuous what?


Continuous     Continuous   Continuous
Integration     Delivery    Deployment




                                     20
Getting Started


         Continuous Delivery Applied
Understand your Process




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




                               23
Developers




         http://flic.kr/p/5cK2
                                 24
Deployment Pipelines
  (aka Build Pipelines)




                          25
Test Driven Development




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




                      27
Automate the Build




                     28
Static Code Analysis




       CheckStyle


                       29
Technical Debt




                 30
The Team




           31
Agile




        32
Continuous Integration




                         33
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
Testing




          35
Testing Phases




                 36
Testing is not a Phase




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




                           38
Specification by Example




                           39
Automated Performance Testing




                                40
Configuration Management




                           41
Version Control




                  42
Build Once, Deploy Many




                          43
Artifact Repositories




                        44
Traceability




               45
Versioning Numbers




                     46
Externalize Configuration



 ESCAPE           Database




                             47
Deploying
        48
Deployment Pipelines
  (aka Build Pipelines)




                          49
Code Deployments




                   50
Version your Database




                        51
52
Infrastructure as Code




                         53
Puppet




         54
Vagrant




          55
Monitoring (sucks)




  https://github.com/monitoringsucks

                                       56
Continuous Deployment




                        57
Contact Me


Mike McGarr
mike.mcgarr@excella.com
http://earlyandoften.wordpress.com
@jmichaelmcgarr




                                     58
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
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
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
                                                                        61
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 –
•   Concordion – http://www.concordion.org/
•   Cucumber – http://cukes.info/
•   easyb – http://www.easyb.org/
•   jBehave - http://jbehave.org/
•   geb - http://www.gebish.org/

                                                             62
Tools
•   Liquibase – www.liquibase.org/
•   Flyway – http://code.google.com/p/flyway/
•   Escape – http://code.google.com/p/escservesconfig/
•   Puppet – http://puppetlabs.com/
•   Chef – http://www.opscode.com/chef/
•   Vagrant – http://vagrantup.com/
•   JMeter – http://jmeter.apache.org/
•   Nagios - http://www.nagios.org/




                                                         63

Continuous delivery applied (DC CI User Group)

Editor's Notes

  • #12 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.
  • #13 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.
  • #14 Manual DeploymentsInsufficient Configuration ManagementInfrequent, Error Prone Deployments