Continuous delivery applied (DC CI User Group)

Post on 06-May-2015

1.880 views 5 download

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.

Transcript of Continuous delivery applied (DC CI User Group)

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 McGarrmike.mcgarr@excella.comhttp://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

mike.mcgarr@excella.com

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/