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

Continuous Delivery Why / How / When ?

Continuous Delivery Why / How / When ?

My speech on AgileBaseCamp 2012 "From Idea to Product"

Alexander Beletsky

January 27, 2012
Tweet

More Decks by Alexander Beletsky

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. Why
    How
    When

    View Slide

  4. The story of one project
     Very simple GTD web application
     .NET technological stack based
     VPS hosted
     Nothing fancy, seriously

    View Slide


  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 ...

    View Slide

  6. If it FAILS in a MIDDLE
    — REPEAT
    Lucky day: 0.5 h
    Bad day: 2 h

    View Slide

  7. Read those figures as:
    My customers suffer for 2 hours once in
    2 weeks, just becase I do update

    View Slide

  8. And by the way...
     It's just takes too much developers time
     It's boring
     Sooner or later you start to hate
    deployments

    View Slide

  9. For bussiness people and
    managers
     “Time-to-Market” factor is very low
     Feedback cycle is very long
     Customer dissatisfaction is very high

    View Slide

  10. Why
    How
    When

    View Slide

  11. Let's define our
    TERMINOLOGY

    View Slide

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

    View Slide

  13. Deployment first
    Delivery after

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  17. 1. Build and deploy locally with one click
    2. Define SCM model based
    3. Run it continuosly
    Recipe of Success:

    View Slide

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

    View Slide

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

    View Slide

  20. UppercuT batch build framework
    RoundhousE database migrations
    DropicK application deployment
    Meet Chuck Norris Tools

    View Slide

  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

    View Slide

  22. Available on a Github

    View Slide

  23. > deploy.bat LOCAL
    > deploy.bat STAGING
    > deploy.bat PRODUCTION
    Step 1 - Build and Deploy
    ACCOMPLISHED

    View Slide

  24.  DVCS are simply rule (Git, HG)
     TRUNK is production ready
     Keep interations in branches
     Keep features in branches
    Step 2 - Define SCM model

    View Slide

  25. Ideal branches count = 2
    master
    develop
    Typical branches count >= 2
    master
    develop
    release
    hotfix

    View Slide

  26. Branch per Environment Layout

    View Slide

  27. Step 2 - Define SCM model
    ACCOMPLISHED
    > git checkout develop
    > git merge --no-ff myfeature
    > git branch -d myfeature
    > git push origin develop

    View Slide

  28.  Availability of Build Server
     SCM build triggering
     Automatically run deployment script
     Roll out application to production
    Step 3 - Run it continuously

    View Slide

  29.  Fork of famous Hudson project
     Open source
     Java based
     Easy start, easy go
     Tons of available plugins
    Say 'Hello' to Jenkins

    View Slide

  30. All configuration could be
    done in UI

    View Slide

  31. Jenkins Instance is deployed
    for each environment

    View Slide

  32. Build/Deployment continuosly
    triggered by SCM

    View Slide

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

    View Slide

  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

    View Slide

  35. Step 3 - Run it continuosly
    ACCOMPLISHED
    Changes are picked up, built, tested
    and deployed automatically

    View Slide

  36. Why
    How
    When

    View Slide

  37. As sooner as better

    View Slide

  38. And?

    View Slide

  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

    View Slide

  40. THANK YOU!
    beletsky.net
    @alexbeletsky
    github.com/alexanderbeletsky

    View Slide