Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hours Long Deployment to CD

Hours Long Deployment to CD

Every team starts somewhere. There is no one-size-fits-all approach when it comes to deciding when and how code gets shipped. The important thing is that code gets shipped. However, process matters and not all processes are created equally. In this session we will look at the story of how one team went from a very intensive, hours-long deployment process to delivering and deploying an application continuously. This is not your typical story of rainbows and unicorns, this is the in-the-trenches look at the evolution of expectations, processes, and tooling necessary to take the leap into continuous delivery.

Jeff Carouth

October 29, 2014
Tweet

More Decks by Jeff Carouth

Other Decks in Programming

Transcript

  1. Continuous Deployment is a noun to identify a process which

    allows you to brag to your friends how many times you pushed to production each day.
  2. Source Control |-- branches! | |-- dev1! | `-- dev2!

    |-- mobile! | `-- IOS! |-- tags! | |-- 2011-12-16-Constellation! | `-- 2012-01-03-Cowpens! `-- trunk!
  3. Deployment dev --> trunk: Cowpens release merge. Revisions: 8249:8252, 8258:8264,

    8267:8268, 8272:8273, 8276:8277, 8279:8294, 8296, 8301, 8305, 8312:8314, 8316:8318, 8321:8326, 8328:8333, 8335, 8338:8352, 8356:8370, 8374:8385, 8389:8398, 8400:8404, 8406:8408, 8410:8412, 8415:8425, 8427:8430
  4. Deployment dev --> trunk: Cowpens release merge. Revisions: 8249:8252, 8258:8264,

    8267:8268, 8272:8273, 8276:8277, 8279:8294, 8296, 8301, 8305, 8312:8314, 8316:8318, 8321:8326, 8328:8333, 8335, 8338:8352, 8356:8370, 8374:8385, 8389:8398, 8400:8404, 8406:8408, 8410:8412, 8415:8425, 8427:8430 ssh production! cd /path/to/application! svn up
  5. boss: Alright, ready to release? dev1: yep, got the merge

    ready. releasing now boss: Let’s do it! … dev1: all done boss: qa time dev2: AIM clear boss: AIM clear boss: haha dev1: PayPal Clear dev3: new query for the report is working WorkChat Deploy Queue Open
  6. What if we deployed each feature branch to an isolated

    remote server instead of using a static box?
  7. The QA team is a safety net, not a bug

    hunting squad. When they find a bug it’s because we failed.
  8. Feature Toggles URL parameters ?gift_card_purchase=true Database toggles if ($tog->enabled(‘gift_card_purchase’) {!

    // process gift cards! } IP toggles $_SERVER[‘REMOTE_ADDR'] === $allowed_ip
  9. Before you can deploy continuously you have to take the

    scary out of deployment. https://twitter.com/jcarouth/status/436187762291511296
  10. jeff: QA, are you available to go over PT#554433? qa:

    Yes I can do that jeff: great! jeff: jarvis i’m deploying repo/345 jarvis: jeff, you do not have grapes yet jeff: oops. can someone review that really quick? dev: got it, looks good :thumbsup: WorkChat Deploy Queue Open
  11. jeff: QA, are you available to go over PT#554433? qa:

    Yes I can do that jeff: great! jeff: jarvis i’m deploying repo/345 jarvis: jeff, you do not have grapes yet jeff: oops. can someone review that really quick? dev: got it, looks good :thumbsup: jeff: jarvis i’m deploying repo/345 jarvis: jeff is deploying repo/345 WorkChat Deploy Queue Active - repo/345
  12. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR
  13. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review
  14. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature
  15. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature! Obtain sign off from PM and code review
  16. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature! Obtain sign off from PM and code review jarvis i’m next repo/45
  17. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature! Obtain sign off from PM and code review jarvis i’m next repo/45! jarvis i’m deploying repo/45
  18. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature! Obtain sign off from PM and code review jarvis i’m next repo/45! jarvis i’m deploying repo/45! Jarvis kicks off the job in Jenkins to deploy the app
  19. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature! Obtain sign off from PM and code review jarvis i’m next repo/45! jarvis i’m deploying repo/45! Jarvis kicks off the job in Jenkins to deploy the app Jenkins reports success
  20. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature! Obtain sign off from PM and code review jarvis i’m next repo/45! jarvis i’m deploying repo/45! Jarvis kicks off the job in Jenkins to deploy the app Jenkins reports success Merge PR into master
  21. the deployment process Do the work jarvis deploy feature repo/feature-34576!

    Work with PM/QA to verify feature on branch Open a PR Make any adjustments to the code from code review jarvis redeploy feature! Obtain sign off from PM and code review jarvis i’m next repo/45! jarvis i’m deploying repo/45! Jarvis kicks off the job in Jenkins to deploy the app Jenkins reports success Merge PR into master jarvis i’m done deploying