continuous delivery applied (agiledc)

Post on 06-May-2015

1.212 Views

Category:

Technology

9 Downloads

Preview:

Click to see full reader

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.

TRANSCRIPT

Continuous DeliveryApplied

Mike McGarrjmcgarr@gmail.com@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

jmcgarr@gmail.com

@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/

top related