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
byTimothy Fitz
Timothy Fitz
Coined Continuous Deployment
Technical Lead at IMVU
CTO at Canvas
Software Consultant
TimothyFitz.com
Systems...
THISTALK
• What is Continuous Deployment?
• Pitfalls of getting to CD
• The future of CD
CONTINUOUS DELIVERY
produce software in short cycles
ensuring that the software
can be reliably released at any time
CONTINUOUS DELIVERY
deployable
at the push of a button
CONTINUOUS DEPLOYMENT
Safe automatic deployment
of frequent small commits
CONTINUOUS DEPLOYMENT
SAFE

The automated process is
responsible for failures.
Not just great test coverage.
Blameless pos...
CONTINUOUS DEPLOYMENT
AUTOMATIC
DEPLOYMENT
Code gets deployed
without human intervention
CONTINUOUS DEPLOYMENT
FREQUENT

SMALL

COMMITS
Smaller commits are safer,
faster, cheaper and simpler.
CONTINUOUS
DELIVERY
push button
CONTINUOUS
DEPLOYMENT
automatic
CONTINUOUS
DELIVERY
CONTINUOUS
DEPLOYMENT
Commit Build Test Deploy
Commit Build Test Deploy
IMVU was actually

Continuous Delivery
IMVU was actually

Continuous Delivery
Shhhhh

Don’t tell anyone!
BOTH
fully automated deploy
BOTH
significant
automated test coverage
BOTH
deploy pipeline
infrastructure
PUSH BUTTON
Human QA
before deploy
Bug!
Bug!
Post-mortem
Bug!
Post-mortemMore Human QA
Bug!
Post-mortemMore Human QA
MORE

Bugs!
MORE

Bugs!
Reduced Confidence
MORE

Bugs!
Reduced ConfidenceLess frequent deploys
MORE

Bugs!
Reduced ConfidenceLess frequent deploys
AUTOMATIC
Bug!
AutomationIncreased Throughput
PUSH BUTTON
Encourages
deploy = feature release
AUTOMATIC
Requires feature flippers
As simple as an if statement.
As complex as your release process needs to be.
BUT…
Can’t I just use Feature Flippers with push button deploy?
TOP DOWN
Please use feature flippers!
When? Where? How often?
Boss
BOTTUM UP
A developer goes to commit some code
This feature isn’t ready,
what can I do?
Boss
Check out feature flippers!
PUSHVS PULL
• A methodology is “pushed” if adoption is

optional and driven by evangelism.
• A methodology is “pulled” if ...
PUSH BUTTON
Service Oriented Architecture
Commit Build Test Backend
Commit Build Test Frontend
PUSH BUTTON
Service Oriented Architecture
Commit Build Test Backend
Commit Build Test Frontend
PUSH BUTTON
Service Oriented Architecture
Commit Build Test Backend
Commit Build Test Frontend
PUSH BUTTON
Service Oriented Architecture
Commit Build Test Backend
Commit Build Test Frontend
PUSH BUTTON
Service Oriented Architecture
Commit Build Test Backend
Commit Build Test Frontend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Inter-service dependencies
Commit Build Test Frontend
Commit Build Test Backend
BROKEN!
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
PUSH BUTTON
Correct but SLOW
Commit Build Test Frontend
Commit Build Test Backend
REAL WORLD SOA :(
Frontend
Middleware
Backend #1 Backend #2 Backend #3
REAL WORLD SOA :(
Commit Build Test Frontend
Commit Build Test Frontend
Commit Build Test Backend #1
Commit Build Test Bac...
AUTOMATIC
Commit Build Test Frontend
Commit Build Test Frontend
Commit Build Test Backend #1
Commit Build Test Backend #2
...
TEMPLATED
Commit Build Test Frontend
Commit Build Test Frontend
Commit Build Test Backend #1
Commit Build Test Backend #2
...
UNIFIED
Commit Build Test
Frontend
Frontend
Backend #1
Backend #2
Backend #3
STAGING ENVIRONMENTS
STAGING ENVIRONMENTS
ARE BAD
STAGING ENVIRONMENTS
• Shared mutable state
• Across multiple teams
• Across multiple deploy pipelines
• No real users
• N...
HOW TO NEVER CD TO PRODUCTION
Deploy

to staging
Staging is broken!Less confidence in deploys
• Only tests should have access to environment
• Must be able to recreate automatically
• Ideally recreate on every test r...
GIT
GIT
IS BAD??
Branch-based workflows aren’t even
Continuous Integration
Merge Build Test
Code
Review
Pull
Request
Commit
Branch-based workflows aren’t even
Continuous Integration
Merge Build Test
Code
Review
Pull
Request
Commit
SOLUTION?
NEVER
BRANCH
MISUSE OF CODE REVIEW
• Catch bugs

(automate! test coverage)
• Teach junior engineers

(pair programming, mentorship)
CODE REVIEW

AFTER DEPLOYMENT
• Ensure readability
• Promote code reuse
• Promote knowledge sharing
• Minimize bus number
DEPLOYMENT IS STRESS FREE
#1 most surprising result of adopting continuous deployment?
CONTINUOUS
ANYTHING

IS GREAT
HAVE
CONTINUOUS
DEPLYOMENT
ASYOUR GOAL
THE FUTURE
CONTINUOUS DEPLOYMENT
THE FUTURE
SOFTWARE
THE PAST
2006 (BUILDBOT)
▸ twisted
▸ jinja
▸ simplejson
▸ pysqlite
THE PRESENT
2016 (5K LINE CURRENT PROJECT)
geoip2
- requests
- maxminddb
- ipaddr
MySQL-python
boto
boto3
- botocore
- jme...
THE FUTURE
PROJECTS HAVE MORE EVERYTHING
▸ More libraries
▸ More frameworks
▸ More API integrations
▸ More frequent deploy...
THE FUTURE
CONTINUOUS DEPLOYMENT OF
▸ Libraries
▸ Frameworks
▸ Operating systems
THE FUTURE
CONTINUOUS DEPLOYMENT OF
▸ Libraries (Google Analytics)
▸ Operating systems (Linux via Ksplice Uptrack)
STOP WASTING TIME
TRYING TO KEEP UP
THE FUTURE
CURRENT LANGUAGES AND FRAMEWORKS
Inherently tightly coupled

Bottlenecked on client’s adoption of change
Perl 6...
THE FUTURE
NEXT BIG LANGUAGE/FRAMEWORK
Winner will be

whoever can

sustain evolution!
THE FUTURE
NEXT BIG LANGUAGE/FRAMEWORK
▸ Built-in support for code migration
▸ Allow libraries to migrate your code when t...
THE FUTURE
REFACTORING DSL
▸ rename(OldClass, NewClass)
▸ change_signature(foo(x), foo(x,y=null))







▸ six.py
▸ go fmt...
THE FUTURE
NEXT BIG LANGUAGE
▸ Prioritize code changes over static code
THE FUTURE
NEXT BIG LANGUAGE
▸ Prioritize code changes over static code
THANKS!
ANY QUESTIONS?
@TimothyFitz
You’ve finished this document.
Download and read it offline.
Upcoming SlideShare
Lean agile scotland 2013
Next
Upcoming SlideShare
Lean agile scotland 2013
Next
Download to read offline and view in fullscreen.

Share

Continuous Deployment: Beyond Continuous Delivery

Download to read offline

Slides from my talk at Agile India 2016.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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
  • powerirs

    Jan. 27, 2021
  • ssuser362d31

    Oct. 22, 2018
  • AlexQin2

    Jun. 15, 2016
  • RainforestQA

    Mar. 24, 2016
  • srinivasulukalikiri1

    Mar. 21, 2016
  • xdallen

    Mar. 19, 2016
  • rsanjay

    Mar. 19, 2016
  • akondrahman

    Mar. 18, 2016
  • cyetain

    Mar. 18, 2016
  • JanJungmann

    Mar. 18, 2016
  • bijanv

    Mar. 18, 2016
  • ThomasWieger

    Mar. 18, 2016

Slides from my talk at Agile India 2016.

Views

Total views

2,665

On Slideshare

0

From embeds

0

Number of embeds

39

Actions

Downloads

38

Shares

0

Comments

0

Likes

12

×