Successfully reported this slideshow.

Continuous Delivery Applied

1,458 views

Published on

Continuous Delivery Applied was presented at the DC Agile Engineering Conference on 12/7/2012 by Mike McGarr (@jmichaelmcgarr).

  • Be the first to comment

Continuous Delivery Applied

  1. 1. Continuous Delivery AppliedMike McGarrjmcgarr@gmail.com@jmichaelmcgarrhttp://earlyandoften.wordpress.comhttp://www.meetup.com/DC-continuous-integration/
  2. 2. About Me• 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 2
  3. 3. Continuous Delivery is……a set of practices and principles aimed at,building, testing, and releasing softwarefaster and more frequently. 3
  4. 4. 4
  5. 5. 5
  6. 6. “Our highest priority is to satisfy thecustomer through early andcontinuous delivery of valuablesoftware.” - First of the Twelve Principles behind the Agile Manifesto 6
  7. 7. Quality or Speed 7
  8. 8. Cycle Time“How long would it take your organization todeploy a change [to production] that involvesjust one single line of code? Do you do this on arepeatable, reliable basis?” - Mary and Tom Poppendieck, Implementing Lean Software Development 8
  9. 9. The Last Mile Manual DeploymentsInsufficient Configuration ManagementInfrequent, Error Prone Deployments 9
  10. 10. StressfulReleases 10
  11. 11. Frequent AutomatedDeployments http://flic.kr/p/29Ree 11
  12. 12. Always Production Ready 12
  13. 13. Continuous Deployment Deployment Pipelines Deployment AutomationConfiguration ContinuousManagement Testing Integration Agile 13
  14. 14. Deployment Pipelineshttp://www.fotopedia.com/users/chmehl 14
  15. 15. Deployment PipelinesA Deployment Pipeline is an automatedmanifestation of your process for gettingsoftware from version control into thehands of your users. 15
  16. 16. Deployment Pipelines (aka Build Pipelines) 16
  17. 17. Continuous what?Continuous Continuous ContinuousIntegration Delivery Deployment 17
  18. 18. Where do I start?
  19. 19. Understand your Process http://www.michaelnygard.com/blog/2008/02/outrunning_your_headlights.html 19
  20. 20. Understand your Organization 20
  21. 21. Developers http://flic.kr/p/5cK2 21
  22. 22. Test Driven Developmenthttp://reddevnews.com/articles/2007/11/01/testdriven-development-tdd.aspx 22
  23. 23. Evolutionary Design 23
  24. 24. Automate the Build 24
  25. 25. Static Code Analysis CheckStyle 25
  26. 26. Technical Debt 26
  27. 27. The Team 27
  28. 28. Agile 28
  29. 29. Continuous Integration 29
  30. 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 30
  31. 31. Build Pipeline in Jenkins 31
  32. 32. Testing 32
  33. 33. Types of Tests 33
  34. 34. Test StrategyTaken from Growing Object-Oriented Software, Guided by Tests 34
  35. 35. Testing is not a Phase http://flic.kr/p/6bcg 35
  36. 36. Specification by Example 36
  37. 37. Specification by Example 37
  38. 38. Automated Performance Testing 38
  39. 39. Configuration Management 39
  40. 40. Version Control 40
  41. 41. Build Once, Deploy Many 41
  42. 42. Externalize Configuration ESCAPE Database 42
  43. 43. Artifact Repositories 43
  44. 44. Traceability 44
  45. 45. Versioning Numbers 45
  46. 46. Branch by Abstraction 46
  47. 47. Deploying 47
  48. 48. Automated Deployments 48
  49. 49. Code Deployments 1. Push New Binary to Server 2. Stop Server 3. Archive Old Binary 4. Deploy New Binary 5. Start Server 49
  50. 50. Version your Database 50
  51. 51. Database Deployments HTML .sql Production DBA DBChange Test DB Version BuildChange Control Server DB DevChange 51
  52. 52. 52
  53. 53. DevOpshttp://www.agileweboperations.com/lean-agile-devops-related 53
  54. 54. DevOps: it’s about culturehttp://dev2ops.org/2012/10/devops-transformation-workshop-for-technical-managers/ 54
  55. 55. Infrastructure as Code 55
  56. 56. Puppet 56
  57. 57. Vagrant 57
  58. 58. Monitoring (sucks) https://github.com/monitoringsucks 58
  59. 59. Continuous Deployment 59
  60. 60. Contact MeMike McGarrjmcgarr@gmail.com@jmichaelmcgarrhttp://earlyandoften.wordpress.com 60
  61. 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 61
  62. 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 62
  63. 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 63
  64. 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 64
  65. 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 65
  66. 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 66
  67. 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/ 67
  68. 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/ 68

×