Continuous Delivery Why / How / When ?

Continuous Delivery Why / How / When ?

My speech on AgileBaseCamp 2012 "From Idea to Product"

F32f547e66f3b6528376d67fdb67008f?s=128

Alexander Beletsky

January 27, 2012
Tweet

Transcript

  1. Why / How / When Do I need CONTINUOS DELIVERY?

  2. Product Developer, E-conomic (Ciklum) Trainer, XP Injection beletsky.net @alexbeletsky github.com/alexanderbeletsky

  3. Why How When

  4. The story of one project  Very simple GTD web

    application  .NET technological stack based  VPS hosted  Nothing fancy, seriously
  5. • Prepare release branch and merge all required changes there

    • Update version in uppercut.config • Commit changes to SCM • Run build.bat • FTP package to deployment server • RDP to deployment server • Unpackage .zip content to temp folder • Manually backup staging database • Stop Stage Web site in IIS manager • Run migration scripts for staging database • Run deployment scripts for staging environment • Run Stage Web site in IIS manager • Test manually that on staging server, that build works fine • If something missed (note it is 60% of all cases) go to 1 • Manually backup production database • Stop Production Web site in IIS manager • Run migration scripts for production database • Run deployment scripts for production environment • Run Production Web site in IIS manager • Test manually that on production server, that build works fine Delivery Script ...
  6. If it FAILS in a MIDDLE — REPEAT Lucky day:

    0.5 h Bad day: 2 h
  7. Read those figures as: My customers suffer for 2 hours

    once in 2 weeks, just becase I do update
  8. And by the way...  It's just takes too much

    developers time  It's boring  Sooner or later you start to hate deployments
  9. For bussiness people and managers  “Time-to-Market” factor is very

    low  Feedback cycle is very long  Customer dissatisfaction is very high
  10. Why How When

  11. Let's define our TERMINOLOGY

  12. Deployment != Delivery Deployment: product IS availble Delivery: product IS

    availble for users
  13. Deployment first Delivery after

  14. All you have to know, the secret formula of Continuous

    Deployment
  15. (Integration + Deployment) * Continuous = Continuous Deployment

  16. Integration is for: fetching latest sources build all product configuration

    items run unit tests run functional tests generate documentation package all artifacts Deployment is for: update test servers
  17. 1. Build and deploy locally with one click 2. Define

    SCM model based 3. Run it continuosly Recipe of Success:
  18.  Build and tests execution  Binaries versioning  SCM

    labeling  Database migration  Web application deployment Step 1 - Build and Deploy
  19.  Build and tests execution  Binaries versioning  SCM

    labeling  Database migration  Web application deployment Step 1 - Build and Deploy Solved by Chuck Norris tools
  20. UppercuT batch build framework RoundhousE database migrations DropicK application deployment

    Meet Chuck Norris Tools
  21. UppercuT Easy to use Configurable by XML Supports config for

    different environment RoundhousE Easy to use Supports MS SQL, MySQL, Postgress Migration by SQL Scripts DropkicK Deployment script as C# code Support for services and sites Different plans
  22. Available on a Github

  23. > deploy.bat LOCAL > deploy.bat STAGING > deploy.bat PRODUCTION Step

    1 - Build and Deploy ACCOMPLISHED
  24.  DVCS are simply rule (Git, HG)  TRUNK is

    production ready  Keep interations in branches  Keep features in branches Step 2 - Define SCM model
  25. Ideal branches count = 2 master develop Typical branches count

    >= 2 master develop release hotfix
  26. Branch per Environment Layout

  27. Step 2 - Define SCM model ACCOMPLISHED > git checkout

    develop > git merge --no-ff myfeature > git branch -d myfeature > git push origin develop
  28.  Availability of Build Server  SCM build triggering 

    Automatically run deployment script  Roll out application to production Step 3 - Run it continuously
  29.  Fork of famous Hudson project  Open source 

    Java based  Easy start, easy go  Tons of available plugins Say 'Hello' to Jenkins
  30. All configuration could be done in UI

  31. Jenkins Instance is deployed for each environment

  32. Build/Deployment continuosly triggered by SCM

  33. As soon as Staging “Looks Alright”, deploy to production

  34. > git checkout master > git merge develop > git

    tag -a 1.2 > git push origin master Deployment is nothing more as pushing changes to origin/master
  35. Step 3 - Run it continuosly ACCOMPLISHED Changes are picked

    up, built, tested and deployed automatically
  36. Why How When

  37. As sooner as better

  38. And?

  39. Results:  Going live time improved 45x  Site down

    time reduced 300x  No more iterations, Kanban  Staging is updating with every push  Setup and forget
  40. THANK YOU! beletsky.net @alexbeletsky github.com/alexanderbeletsky