CI, Pipelines and
 Deployment
Chris.Read@ThoughtWorks.com
         chris-read.net
About Me

•   Unix Admin

•   Network Admin

•   Developer

•   Principal Consultant
CI Core Practices




               Photo by teclasorg
Single Source
              Repository

•   Single point of truth

•   Everyone's code in the same place

•   NOT a branch per developer

•   Shared ownership
Automate Build

•   Using the IDE is not automating!

•   Using the IDE does not give you a repeatable build

•   Use a build tool

•   Compile, package, test
Automate Testing


•   Not just Unit Tests

•   Failing tests fail the build

•   Fix it if it’s broken or you’re wasting your time
Publish Latest
            Distributable

•   Make it easy to get the final product

•   Should only be built once so you deploy what’s been tested

•   Configuration is separate
CI Evolution
Commit More Often


•   “At least once a day” - aim for at least once an hour

•   Needs a small unit of work

•   To commit cleanly you need to update first
Every Commit Builds


•   It’s all about fast feedback

•   Small changes

•   Less to merge and/or fix
Test in Production
             Clone

•   Detect multi-threaded or cluster issues

•   Tests system architecture and upgrades

•   Includes databases!

•   It’s about moving parts, not capacity
Keep Build Fast

•   It really is all about feedback

•   If things break you find out about it while it’s still fresh in
    your mind

•   Keep up with frequent check ins
Everyone Sees What’s
     Happening

•   Reduce time to fix

•   No excuse to check in on broken build

•   It’s not about blame, it’s about feedback
Automate Deployment

•   Reduce Human Error

•   Verify you can get it running somewhere other than “my
    machine”

•   Test not only the code but your deployment mechanism too

•   Don’t tie up Sys Admins with boring stuff

•   Don’t tie up Devs waiting for feedback
Making CI Work

•   Can’t be done in
    isolation

•   Pick the right tools for
    the job

•   It’s not a silver bullet

                               Image by LiminalMike
Build Pipelines




                  Photo by rickz
Traditional CI Flow
Build Pipeline Flow
Parallel Jobs
One Click Deploys


•   Pre-requisite for build pipelines

•   Reduces deployment time and risk

•   Makes go live a non-event
Continuous Deployment




              Photo by stevendepolo
Timeline
Summary
•   CI and Build Pipelines improve

    •   Quality

    •   Time to Market

    •   Confidence

•   Continuous Deployment is the next step

•   These practices require Devs and Sys Admins to work
    closely together
Q&A
Useful Links

•   http://www.martinfowler.com/articles/
    continuousIntegration.html

•   http://www.thoughtworks.com/pdfs/
    deployment_production_line.pdf

•   http://saucelabs.com/blog/index.php/2009/09/continuous-
    deployment%E2%80%94the-video/

Continuous Integration, Build Pipelines and Continuous Deployment

  • 1.
    CI, Pipelines and Deployment Chris.Read@ThoughtWorks.com chris-read.net
  • 2.
    About Me • Unix Admin • Network Admin • Developer • Principal Consultant
  • 3.
    CI Core Practices Photo by teclasorg
  • 4.
    Single Source Repository • Single point of truth • Everyone's code in the same place • NOT a branch per developer • Shared ownership
  • 5.
    Automate Build • Using the IDE is not automating! • Using the IDE does not give you a repeatable build • Use a build tool • Compile, package, test
  • 6.
    Automate Testing • Not just Unit Tests • Failing tests fail the build • Fix it if it’s broken or you’re wasting your time
  • 7.
    Publish Latest Distributable • Make it easy to get the final product • Should only be built once so you deploy what’s been tested • Configuration is separate
  • 8.
  • 9.
    Commit More Often • “At least once a day” - aim for at least once an hour • Needs a small unit of work • To commit cleanly you need to update first
  • 10.
    Every Commit Builds • It’s all about fast feedback • Small changes • Less to merge and/or fix
  • 11.
    Test in Production Clone • Detect multi-threaded or cluster issues • Tests system architecture and upgrades • Includes databases! • It’s about moving parts, not capacity
  • 12.
    Keep Build Fast • It really is all about feedback • If things break you find out about it while it’s still fresh in your mind • Keep up with frequent check ins
  • 13.
    Everyone Sees What’s Happening • Reduce time to fix • No excuse to check in on broken build • It’s not about blame, it’s about feedback
  • 14.
    Automate Deployment • Reduce Human Error • Verify you can get it running somewhere other than “my machine” • Test not only the code but your deployment mechanism too • Don’t tie up Sys Admins with boring stuff • Don’t tie up Devs waiting for feedback
  • 15.
    Making CI Work • Can’t be done in isolation • Pick the right tools for the job • It’s not a silver bullet Image by LiminalMike
  • 16.
    Build Pipelines Photo by rickz
  • 17.
  • 18.
  • 19.
  • 20.
    One Click Deploys • Pre-requisite for build pipelines • Reduces deployment time and risk • Makes go live a non-event
  • 21.
    Continuous Deployment Photo by stevendepolo
  • 22.
  • 23.
    Summary • CI and Build Pipelines improve • Quality • Time to Market • Confidence • Continuous Deployment is the next step • These practices require Devs and Sys Admins to work closely together
  • 24.
  • 25.
    Useful Links • http://www.martinfowler.com/articles/ continuousIntegration.html • http://www.thoughtworks.com/pdfs/ deployment_production_line.pdf • http://saucelabs.com/blog/index.php/2009/09/continuous- deployment%E2%80%94the-video/