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

Continuous Delivery in Java - Things we learned hurting ourselves

Continuous Delivery in Java - Things we learned hurting ourselves

The slides of my talk at the Italian Agile Day 2015 about Continuous Delivery in Java

8114e0a537a628869979b6b3ed87e5ac?s=128

Paolo D'Incau

November 07, 2015
Tweet

Transcript

  1. Continuous Delivery in Java Cose che abbiamo imparato facendoci del

    male Italian Agile Day ‘15
  2. @pdincau Here I am

  3. Continuous Delivery? What is

  4. “Continuous Delivery is a software development discipline where you build

    software in such a way that the software can be released to production at any time. ” Martin Fowler* * martinfowler.com/bliki/ContinuousDelivery.html
  5. “Continuous Delivery is nothing more than reducing the stress you

    get when you deliver business value to the customer ” My Team* * Come and ask!
  6. n t Continuous Delivery... What is

  7. Continuous Integration

  8. Continuous Deployment

  9. “Safety" Deploy rules

  10. Technically Speaking

  11. Deploy any specific working version to production with confidence

  12. 3 ways

  13. Rodeo Style

  14. No tests Manual deploy Snowflake environments Non predictable outcome Few

    or very little collaboration
  15. By the book

  16. Fast Feedback Done is released Shared responsibility Everything is automated

    Repeatable and reliable process
  17. Start small and iterate

  18. Once upon a time...

  19. We did know...

  20. Previous deployment process was painful Database continuously change Different environments

  21. Iteration n.1 No Automation

  22. Environment replica on AWS Manual build Manual DB migrations Deploy

    with scp to remote JBoss
  23. It was our own choice...

  24. ...but we felt like this

  25. No automation at all When was our last deploy?

  26. A taste of Automation Iteration n.2

  27. Set up a basic Jenkins installation Test and build triggered

    on push DB migration using Liquibase Task to deploy on AWS
  28. This worked for a while

  29. Errors in MyBatis DB mappers Wrong/Missing wirings

  30. Yay! Environments are ready!

  31. Deploy Everywhere Iteration n.3

  32. New Jenkins job to run IT Track slowest tests First

    official deploy an all environments
  33. …with different DB drivers !#$?!

  34. Duplication

  35. Incorrect use of mvn profiles N-builds for N-environments Long build

    and deploy time
  36. Single Artefact Iteration n.4

  37. Got rid of configurations using JBoss *Unique* artefact for all

    environments Deploy version X.Y.Z from Nexus
  38. We started getting fast

  39. But QA were not so happy Branches, branches everywhere!

  40. Make them happy Iteration n.5

  41. AWS is for nightly builds Tags over branches Track deployed

    version
  42. Acceptance tests

  43. Explained values and motivations to Product Owner

  44. Remove Candidate Clean Up Clean Up Meet the pipeline Migrate

    Database Fetch Unit Tests Build Build Slow Tests Integration Tests Integration Deploy Publish UAT QA and Publish
  45. Where to go next

  46. Parallel builds Environments Provisioning

  47. Things we would change...

  48. Pipeline with “placeholders” Extract configurations Explain at the beginning the

    values behind
  49. Things we would do again...

  50. Build the pipeline iteratively Use of Liquibase Share pipeline responsibility

  51. Recommended reading

  52. That’s all!

  53. Thanks @pdincau