Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Continuous Deployment: Beyond Continuous Delivery

2,211 views

Published on

Slides from my talk at Agile India 2016.

Published in: Software
  • Be the first to comment

Continuous Deployment: Beyond Continuous Delivery

  1. 1. CONTINUOUS DEPLOYMENT Beyond Continuous Delivery byTimothy Fitz
  2. 2. Timothy Fitz Coined Continuous Deployment Technical Lead at IMVU CTO at Canvas Software Consultant TimothyFitz.com SystemsLive.com @TimothyFitz
  3. 3. THISTALK • What is Continuous Deployment? • Pitfalls of getting to CD • The future of CD
  4. 4. CONTINUOUS DELIVERY produce software in short cycles ensuring that the software can be reliably released at any time
  5. 5. CONTINUOUS DELIVERY deployable at the push of a button
  6. 6. CONTINUOUS DEPLOYMENT Safe automatic deployment of frequent small commits
  7. 7. CONTINUOUS DEPLOYMENT SAFE
 The automated process is responsible for failures. Not just great test coverage. Blameless post-mortems.
  8. 8. CONTINUOUS DEPLOYMENT AUTOMATIC DEPLOYMENT Code gets deployed without human intervention
  9. 9. CONTINUOUS DEPLOYMENT FREQUENT
 SMALL
 COMMITS Smaller commits are safer, faster, cheaper and simpler.
  10. 10. CONTINUOUS DELIVERY push button CONTINUOUS DEPLOYMENT automatic
  11. 11. CONTINUOUS DELIVERY CONTINUOUS DEPLOYMENT Commit Build Test Deploy Commit Build Test Deploy
  12. 12. IMVU was actually
 Continuous Delivery
  13. 13. IMVU was actually
 Continuous Delivery Shhhhh
 Don’t tell anyone!
  14. 14. BOTH fully automated deploy
  15. 15. BOTH significant automated test coverage
  16. 16. BOTH deploy pipeline infrastructure
  17. 17. PUSH BUTTON Human QA before deploy
  18. 18. Bug!
  19. 19. Bug! Post-mortem
  20. 20. Bug! Post-mortemMore Human QA
  21. 21. Bug! Post-mortemMore Human QA
  22. 22. MORE
 Bugs!
  23. 23. MORE
 Bugs! Reduced Confidence
  24. 24. MORE
 Bugs! Reduced ConfidenceLess frequent deploys
  25. 25. MORE
 Bugs! Reduced ConfidenceLess frequent deploys
  26. 26. AUTOMATIC Bug! AutomationIncreased Throughput
  27. 27. PUSH BUTTON Encourages deploy = feature release
  28. 28. AUTOMATIC Requires feature flippers As simple as an if statement. As complex as your release process needs to be.
  29. 29. BUT… Can’t I just use Feature Flippers with push button deploy?
  30. 30. TOP DOWN Please use feature flippers! When? Where? How often? Boss
  31. 31. BOTTUM UP A developer goes to commit some code This feature isn’t ready, what can I do? Boss Check out feature flippers!
  32. 32. PUSHVS PULL • A methodology is “pushed” if adoption is
 optional and driven by evangelism. • A methodology is “pulled” if adoption is
 mandatory and driven by necessity.
  33. 33. PUSH BUTTON Service Oriented Architecture Commit Build Test Backend Commit Build Test Frontend
  34. 34. PUSH BUTTON Service Oriented Architecture Commit Build Test Backend Commit Build Test Frontend
  35. 35. PUSH BUTTON Service Oriented Architecture Commit Build Test Backend Commit Build Test Frontend
  36. 36. PUSH BUTTON Service Oriented Architecture Commit Build Test Backend Commit Build Test Frontend
  37. 37. PUSH BUTTON Service Oriented Architecture Commit Build Test Backend Commit Build Test Frontend
  38. 38. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  39. 39. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  40. 40. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  41. 41. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  42. 42. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  43. 43. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  44. 44. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  45. 45. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  46. 46. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  47. 47. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend
  48. 48. PUSH BUTTON Inter-service dependencies Commit Build Test Frontend Commit Build Test Backend BROKEN!
  49. 49. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  50. 50. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  51. 51. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  52. 52. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  53. 53. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  54. 54. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  55. 55. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  56. 56. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  57. 57. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  58. 58. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  59. 59. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  60. 60. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  61. 61. PUSH BUTTON Correct but SLOW Commit Build Test Frontend Commit Build Test Backend
  62. 62. REAL WORLD SOA :( Frontend Middleware Backend #1 Backend #2 Backend #3
  63. 63. REAL WORLD SOA :( Commit Build Test Frontend Commit Build Test Frontend Commit Build Test Backend #1 Commit Build Test Backend #2 Commit Build Test Backend #3
  64. 64. AUTOMATIC Commit Build Test Frontend Commit Build Test Frontend Commit Build Test Backend #1 Commit Build Test Backend #2 Commit Build Test Backend #3
  65. 65. TEMPLATED Commit Build Test Frontend Commit Build Test Frontend Commit Build Test Backend #1 Commit Build Test Backend #2 Commit Build Test Backend #3
  66. 66. UNIFIED Commit Build Test Frontend Frontend Backend #1 Backend #2 Backend #3
  67. 67. STAGING ENVIRONMENTS
  68. 68. STAGING ENVIRONMENTS ARE BAD
  69. 69. STAGING ENVIRONMENTS • Shared mutable state • Across multiple teams • Across multiple deploy pipelines • No real users • No real risk • Deploying offers no real risk reduction • Broken Regularly • 2nd-class compared to production

  70. 70. HOW TO NEVER CD TO PRODUCTION Deploy
 to staging Staging is broken!Less confidence in deploys
  71. 71. • Only tests should have access to environment • Must be able to recreate automatically • Ideally recreate on every test run • Every deploy pipeline gets its own environment But where do I run integration tests? Commit Build Test Production
  72. 72. GIT
  73. 73. GIT IS BAD??
  74. 74. Branch-based workflows aren’t even Continuous Integration Merge Build Test Code Review Pull Request Commit
  75. 75. Branch-based workflows aren’t even Continuous Integration Merge Build Test Code Review Pull Request Commit
  76. 76. SOLUTION? NEVER BRANCH
  77. 77. MISUSE OF CODE REVIEW • Catch bugs
 (automate! test coverage) • Teach junior engineers
 (pair programming, mentorship)
  78. 78. CODE REVIEW
 AFTER DEPLOYMENT • Ensure readability • Promote code reuse • Promote knowledge sharing • Minimize bus number
  79. 79. DEPLOYMENT IS STRESS FREE #1 most surprising result of adopting continuous deployment?
  80. 80. CONTINUOUS ANYTHING
 IS GREAT
  81. 81. HAVE CONTINUOUS DEPLYOMENT ASYOUR GOAL
  82. 82. THE FUTURE CONTINUOUS DEPLOYMENT
  83. 83. THE FUTURE SOFTWARE
  84. 84. THE PAST 2006 (BUILDBOT) ▸ twisted ▸ jinja ▸ simplejson ▸ pysqlite
  85. 85. THE PRESENT 2016 (5K LINE CURRENT PROJECT) geoip2 - requests - maxminddb - ipaddr MySQL-python boto boto3 - botocore - jmespath - python-dateutil - six - docutils - futures celery - pytz - billiard - kombu - anyjson - amqp psycopg2 pyfakefs - mox3 - pbr - fixtures - testtools - extras - pyrsistent - python- mimeparse - unittest2 - argparse - traceback2 - linecache2 airflow - alembic - SQLAlchemy - Mako - MarkupSafe - python-editor - chartkick - croniter - setuptools - dill - flask - Werkzeug - Jinja2 - itsdangerous - flask-admin - wtforms - flask-cache - flask-login - future - gunicorn - markdown - pandas - numpy - pygments - setproctitle - thrift - Flask-WTF redis wsgiref repoze.lru datawarehouse user-agents - ua-parser nose 66!
  86. 86. THE FUTURE PROJECTS HAVE MORE EVERYTHING ▸ More libraries ▸ More frameworks ▸ More API integrations ▸ More frequent deployment
  87. 87. THE FUTURE CONTINUOUS DEPLOYMENT OF ▸ Libraries ▸ Frameworks ▸ Operating systems
  88. 88. THE FUTURE CONTINUOUS DEPLOYMENT OF ▸ Libraries (Google Analytics) ▸ Operating systems (Linux via Ksplice Uptrack)
  89. 89. STOP WASTING TIME TRYING TO KEEP UP
  90. 90. THE FUTURE CURRENT LANGUAGES AND FRAMEWORKS Inherently tightly coupled
 Bottlenecked on client’s adoption of change Perl 6? Python 3? AngularJS 2? Ruby on Rails 2.x 3.x 4.x
  91. 91. THE FUTURE NEXT BIG LANGUAGE/FRAMEWORK Winner will be
 whoever can
 sustain evolution!
  92. 92. THE FUTURE NEXT BIG LANGUAGE/FRAMEWORK ▸ Built-in support for code migration ▸ Allow libraries to migrate your code when the library changes
  93. 93. THE FUTURE REFACTORING DSL ▸ rename(OldClass, NewClass) ▸ change_signature(foo(x), foo(x,y=null))
 
 
 
 ▸ six.py ▸ go fmt SOME HINTS OF THE FUTURE
  94. 94. THE FUTURE NEXT BIG LANGUAGE ▸ Prioritize code changes over static code
  95. 95. THE FUTURE NEXT BIG LANGUAGE ▸ Prioritize code changes over static code THANKS! ANY QUESTIONS? @TimothyFitz

×