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

Continuous Delivery in Motion

Continuous Delivery in Motion

The deck we used for the XConf Jaipur 2016.

Avinash Chugh

May 07, 2016
Tweet

More Decks by Avinash Chugh

Other Decks in Programming

Transcript

  1. WHAT DOES IT TAKE FOR A BUSINESS TO SUCCEED 4

    Faster time to market Being responsive to customer needs
  2. PERILS OF LONG RELEASE CYCLES 7 1 1 2 1

    2 3 4 1 2 3 Release Time Unreleased changes = risk Risk Value
  3. BENEFITS OF FREQUENT RELEASES 8 1 2 3 4 1

    1 2 1 2 3 Release Release Release Released changes = value
  4. 9 HOW CAN I FREQUENTLY RELEASE SOFTWARE HOW CAN I

    BUILD SOFTWARE INCREMENTALLY HOW CAN I CONFIDENTLY RELEASE NEW SOFTWARE
  5. 2. CI server checks out & compiles code 4. Code

    analysis 5. Create & publish artifact 15 3. Unit tests 1. Developer commits code to SCM Commit Stage COMMIT STAGE
  6. 16 2. Retrieve artifact 4. Run smoke tests 5. Run

    acceptance tests 3. Deploy artifact 1. Prepare environment Acceptance Stage ACCEPTANCE STAGE
  7. 17 2. Retrieve artifacts 4. Run smoke tests 3. Deploy

    artifacts 1. Prepare environment Deploy Stage DEPLOY STAGE One-click deployments
  8. 1 2 3 4 5 6 A LOT HAPPENS BEFORE

    A RELEASE 18 Regression testing User Acceptance Integration Infrastructure Setup Performance testing Security Audit
  9. TESTING PYRAMID 20 End to end – business facing Localized

    – technology facing ▪Slower feedback ▪Higher cost of change
  10. LOW REUSE AND MERGE ISSUES 22 Merge Merge Trunk 2

    2 3 4 2 3 1 1 1 1 4 5 2 3 1 2 1 3 2 1 1 4 3 2 1 4 3 2 1 4 5 2 3
  11. COLLABORATIVE DEVELOPMENT 23 Trunk 1 2 3 4 5 1

    1 3 4 2 4 5 2 1 3 2 4 3 Key principle: Continuous Integration
  12. CONTINUOUS INTEGRATION PRACTICES 24 ▪ One component, one repository ▪

    Everyone commits to trunk every day ▪ No branches
  13. RELEASING INCOMPLETE WORK 28 [featureToggles] wobblyFoobars: true flightyForkHandles: false Config

    File <toggle name=wobblyFoobars> ... various UI elements </toggle> some.jsp forkHandle = (featureConfig.isOn(‘flightlyForkHandles)) ? new FlightyForkHander(aCandle) : new ForkHandler(aCandle) other.java Pattern: Feature toggles
  14. GUIDELINES FOR FEATURE TOGGLES 29 ▪ Use them only when

    needed ▪ Prefer feature hiding ▪ Remove toggles once feature is live
  15. WHAT WE COVERED 37 ▪Fast feedback, and short release cycles

    ▪Keeping WIPs to a minimum ▪If it’s hard, do it more often ▪Trunk-based development ▪The need for automation ▪Feature toggles ▪Branch by abstraction
  16. SO MUCH MORE TO EXPLORE 38 ▪Deployment strategies ▪Automated deployments

    ▪Configuration management ▪Infrastructure provisioning ▪Cloud deployments ▪Virtualization ▪Tooling support