Upload
mike-mcgarr
View
1.213
Download
9
Embed Size (px)
DESCRIPTION
Writing code is fun, but deploying to production is not. Production releases are scary events that last all weekend, and you find yourself worrying about how it will go. Did we miss a configuration file? Is the database schema the same as the one in the test environment? Does the last minute hot fix we just applied break any other features? Did I forget to include an installation instruction for the system administrators? Continuous Delivery is a collection of principles and practices aimed at addressing the problems teams typically face when releasing changes to production. By applying rigorous automation, testing and configuration management, teams are able to confidently and consistently deploy changes from version control to production without fear. In this talk, Mike McGarr will provide listeners with an introduction into the world of Continuous Delivery. After an introduction into the concepts and principles of Continuous Delivery, he will discuss many of the techniques for implementing Continuous Delivery and recommend some tools that can be used on your development project.
Citation preview
Continuous DeliveryApplied
Mike [email protected]@jmichaelmcgarrhttp://earlyandoften.wordpress.com http://www.meetup.com/DC-continuous-integration/
• J. Michael (Mike) McGarr
• 11 years as a consultant, Excella Consulting
• 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
“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
“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
Cycle Time
8
The Last Mile
Manual Deployments
Insufficient Configuration Management
Infrequent, Error Prone Deployments
9
Stressful Releases
10
Frequent Automated Deployments
http://flic.kr/p/29Ree
11
Always Production Ready
12
Agile
ConfigurationManagement
Continuous Integration Testing
Deployment Pipelines
Continuous Deployment
Deployment Automation
13
Deployment Pipelines
http://www.fotopedia.com/users/chmehl
14
Deployment Pipelines
A Deployment Pipeline is an automated manifestation of your process for getting software from version control into the hands of your users.
15
Deployment Pipelines(aka Build Pipelines)
16
Continuous what?
ContinuousDelivery
ContinuousDeployment
ContinuousIntegration
Where do I start?
18
Understand your Process
http://www.michaelnygard.com/blog/2008/02/outrunning_your_headlights.html
19
Understand your Organization
20
Developers
http://flic.kr/p/5cK2
21
Test Driven Development
http://reddevnews.com/articles/2007/11/01/testdriven-development-tdd.aspx
22
Evolutionary Design
23
Automate the Build
24
Static Code Analysis
CheckStyle
25
Technical Debt
26
The Team
27
Agile
28
Continuous Integration
29
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
Testing
31
Types of Tests
32
Testing is not a Phase
http://flic.kr/p/6bcg
33
Specification by Example
34
Specification by Example
35
Automated Performance Testing
36
Configuration Management
Version Control
37
38
Build Once, Deploy Many
Externalize Configuration
39
ESCAPE Database
Artifact Repositories
40
41
Traceability
42
Versioning Numbers
Branch by Abstraction
43
44
Deploying
45
Deployment Pipelines(aka Build Pipelines)
46
Build Pipeline in Jenkins
Code Deployments
47
Version your Database
48
49
Infrastructure as Code
50
51
Puppet
Vagrant
52
53
Monitoring (sucks)
https://github.com/monitoringsucks
54
Continuous Deployment
55
Contact Me
Mike McGarr
@jmichaelmcgarr
http://earlyandoften.wordpress.com
56
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/
57
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
58
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/
59
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/
60
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/