Upload
mike-mcgarr
View
1.880
Download
5
Embed Size (px)
DESCRIPTION
These are slides I used to present to the DC Continuous Integration, Delivery and Deployment User Group on 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
DC Continuous Integration, Delivery and Deployment User Group
Thank you Excella Consulting
2
Excella is Hiring!
3
• October 15th – Continuous Delivery in the Cloud Case Study (Paul Duvall)
• November 7th – Anatomy of a Build Pipeline (Sam Brown)
• December 13th – Finalizing Speaker
Upcoming Events
4
Continuous DeliveryApplied
Mike [email protected]://earlyandoften.wordpress.com http://www.meetup.com/DC-continuous-integration/ @jmichaelmcgarr
• 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
About Me
6
…a set of practices and principles aimed at, building, testing, and releasing software faster and more frequently.
7
Continuous Delivery is…
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
Cycle TimeQuality
10
Goals
“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
Cycle Time
12
The Last Mile
Manual Deployments
Insufficient Configuration Management
Infrequent, Error Prone Deployments
13
Stressful Releases
14
Frequent Automated Deployments
http://flic.kr/p/29Ree
15
Always Production Ready
16
Agile
ConfigurationManagement
Continuous Integration Testing
Deployment Pipelines
Continuous Deployment
Deployment Automation
17
Deployment Pipelines
http://www.fotopedia.com/users/chmehl
18
Deployment Pipelines
A Deployment Pipeline is an automated manifestation of your process for getting software from version control into the hands of your users.
19
Deployment Pipelines(aka Build Pipelines)
20
Continuous what?
ContinuousDelivery
ContinuousDeployment
ContinuousIntegration
Getting Started
Continuous Delivery Applied
22
Understand your Process
http://www.michaelnygard.com/blog/2008/02/outrunning_your_headlights.html
23
Understand your Organization
24
Developers
http://flic.kr/p/5cK2
25
Deployment Pipelines(aka Build Pipelines)
26
Test Driven Development
http://reddevnews.com/articles/2007/11/01/testdriven-development-tdd.aspx
27
Evolutionary Design
28
Automate the Build
29
Static Code Analysis
CheckStyle
30
Technical Debt
31
The Team
32
Agile
33
Continuous Integration
34
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
35
Testing
36
Testing Phases
37
Testing is not a Phase
http://flic.kr/p/6bcg
38
Specification by Example
39
Specification by Example
40
Automated Performance Testing
41
Configuration Management
Version Control
42
43
Build Once, Deploy Many
Artifact Repositories
44
45
Traceability
46
Versioning Numbers
Externalize Configuration
47
ESCAPE Database
48
Deploying
49
Deployment Pipelines(aka Build Pipelines)
Code Deployments
50
Version your Database
51
52
Infrastructure as Code
53
54
Puppet
Vagrant
55
56
Monitoring (sucks)
https://github.com/monitoringsucks
57
Continuous Deployment
58
Contact Me
Mike McGarr
http://earlyandoften.wordpress.com
@jmichaelmcgarr
59
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/
60
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
61
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
62
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/
63
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/