continuous deployment: beyond continuous delivery

95
CONTINUOUS DEPLOYMENT Beyond Continuous Delivery by Timothy Fitz

Upload: timothy-fitz

Post on 11-Feb-2017

1.906 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DEPLOYMENTBeyond Continuous Delivery

by Timothy Fitz

Page 2: Continuous Deployment: Beyond Continuous Delivery

Timothy Fitz

Coined Continuous DeploymentTechnical Lead at IMVU

CTO at CanvasSoftware Consultant

TimothyFitz.comSystemsLive.com

@TimothyFitz

Page 3: Continuous Deployment: Beyond Continuous Delivery

THIS TALK

• What is Continuous Deployment?

• Pitfalls of getting to CD

• The future of CD

Page 4: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DELIVERY

produce software in short cyclesensuring that the software

can be reliably released at any time

Page 5: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DELIVERY

deployableat the push of a button

Page 6: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DEPLOYMENT

Safe automatic deploymentof frequent small commits

Page 7: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DEPLOYMENT

SAFEThe automated process is

responsible for failures.Not just great test coverage.

Blameless post-mortems.

Page 8: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DEPLOYMENT

AUTOMATIC DEPLOYMENT

Code gets deployed without human intervention

Page 9: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DEPLOYMENT

FREQUENT SMALL

COMMITS Smaller commits are safer, faster, cheaper and simpler.

Page 10: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DELIVERY

push button

CONTINUOUS DEPLOYMENT

automatic

Page 11: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS DELIVERY

CONTINUOUS DEPLOYMENT

Commit Build Test Deploy

Commit Build Test Deploy

Page 12: Continuous Deployment: Beyond Continuous Delivery

IMVU was actuallyContinuous Delivery

Page 13: Continuous Deployment: Beyond Continuous Delivery

IMVU was actuallyContinuous Delivery

Shhhhh

Don’t tell anyone!

Page 14: Continuous Deployment: Beyond Continuous Delivery

BOTH

fully automated deploy

Page 15: Continuous Deployment: Beyond Continuous Delivery

BOTH

significant automated test coverage

Page 16: Continuous Deployment: Beyond Continuous Delivery

BOTH

deploy pipeline infrastructure

Page 17: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTON

Human QAbefore deploy

Page 18: Continuous Deployment: Beyond Continuous Delivery

Bug!

Page 19: Continuous Deployment: Beyond Continuous Delivery

Bug!

Post-mortem

Page 20: Continuous Deployment: Beyond Continuous Delivery

Bug!

Post-mortemMore Human QA

Page 21: Continuous Deployment: Beyond Continuous Delivery

Bug!

Post-mortemMore Human QA

Page 22: Continuous Deployment: Beyond Continuous Delivery

MOREBugs!

Page 23: Continuous Deployment: Beyond Continuous Delivery

MOREBugs!

Reduced Confidence

Page 24: Continuous Deployment: Beyond Continuous Delivery

MOREBugs!

Reduced ConfidenceLess frequent deploys

Page 25: Continuous Deployment: Beyond Continuous Delivery

MOREBugs!

Reduced ConfidenceLess frequent deploys

Page 26: Continuous Deployment: Beyond Continuous Delivery

AUTOMATIC

Bug!

AutomationIncreased Throughput

Page 27: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTON

Encourages deploy = feature release

Page 28: Continuous Deployment: Beyond Continuous Delivery

AUTOMATIC

Requires feature flippers

As simple as an if statement.As complex as your release process needs to be.

Page 29: Continuous Deployment: Beyond Continuous Delivery

BUT…Can’t I just use Feature Flippers with push button deploy?

Page 30: Continuous Deployment: Beyond Continuous Delivery

TOP DOWN

Please use feature flippers!

When? Where? How often?

Boss

Page 31: Continuous Deployment: Beyond Continuous Delivery

BOTTUM UPA developer goes to commit some code

This feature isn’t ready, what can I do?

BossCheck out feature flippers!

Page 32: Continuous Deployment: Beyond Continuous Delivery

PUSH VS PULL

• A methodology is “pushed” if adoption isoptional and driven by evangelism.

• A methodology is “pulled” if adoption ismandatory and driven by necessity.

Page 33: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONService Oriented Architecture

Commit Build Test Backend

Commit Build Test Frontend

Page 34: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONService Oriented Architecture

Commit Build Test Backend

Commit Build Test Frontend

Page 35: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONService Oriented Architecture

Commit Build Test Backend

Commit Build Test Frontend

Page 36: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONService Oriented Architecture

Commit Build Test Backend

Commit Build Test Frontend

Page 37: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONService Oriented Architecture

Commit Build Test Backend

Commit Build Test Frontend

Page 38: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 39: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 40: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 41: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 42: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 43: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 44: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 45: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 46: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 47: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

Page 48: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONInter-service dependencies

Commit Build Test Frontend

Commit Build Test Backend

BROKEN!

Page 49: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 50: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 51: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 52: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 53: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 54: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 55: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 56: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 57: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 58: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 59: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 60: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 61: Continuous Deployment: Beyond Continuous Delivery

PUSH BUTTONCorrect but SLOW

Commit Build Test Frontend

Commit Build Test Backend

Page 62: Continuous Deployment: Beyond Continuous Delivery

REAL WORLD SOA :(

Frontend

Middleware

Backend #1 Backend #2 Backend #3

Page 63: Continuous Deployment: Beyond Continuous Delivery

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

Page 64: Continuous Deployment: Beyond Continuous Delivery

AUTOMATIC

Commit Build Test Frontend

Commit Build Test Frontend

Commit Build Test Backend #1

Commit Build Test Backend #2

Commit Build Test Backend #3

Page 65: Continuous Deployment: Beyond Continuous Delivery

TEMPLATED

Commit Build Test Frontend

Commit Build Test Frontend

Commit Build Test Backend #1

Commit Build Test Backend #2

Commit Build Test Backend #3

Page 66: Continuous Deployment: Beyond Continuous Delivery

UNIFIED

Commit Build Test

Frontend

Frontend

Backend #1

Backend #2

Backend #3

Page 67: Continuous Deployment: Beyond Continuous Delivery

STAGING ENVIRONMENTS

Page 68: Continuous Deployment: Beyond Continuous Delivery

STAGING ENVIRONMENTS

ARE BAD

Page 69: Continuous Deployment: Beyond Continuous Delivery

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

Page 70: Continuous Deployment: Beyond Continuous Delivery

HOW TO NEVER CD TO PRODUCTION

Deploy to staging

Staging is broken!Less confidence in deploys

Page 71: Continuous Deployment: Beyond Continuous Delivery

• 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

Page 72: Continuous Deployment: Beyond Continuous Delivery

GIT

Page 73: Continuous Deployment: Beyond Continuous Delivery

GIT

IS BAD??

Page 74: Continuous Deployment: Beyond Continuous Delivery

Branch-based workflows aren’t even Continuous Integration

Merge Build TestCode Review

Pull RequestCommit

Page 75: Continuous Deployment: Beyond Continuous Delivery

Branch-based workflows aren’t even Continuous Integration

Merge Build TestCode Review

Pull RequestCommit

Page 76: Continuous Deployment: Beyond Continuous Delivery

SOLUTION?

NEVER BRANCH

Page 77: Continuous Deployment: Beyond Continuous Delivery

MISUSE OF CODE REVIEW

• Catch bugs(automate! test coverage)

• Teach junior engineers (pair programming, mentorship)

Page 78: Continuous Deployment: Beyond Continuous Delivery

CODE REVIEW AFTER DEPLOYMENT

• Ensure readability

• Promote code reuse

• Promote knowledge sharing

• Minimize bus number

Page 79: Continuous Deployment: Beyond Continuous Delivery

DEPLOYMENT IS STRESS FREE#1 most surprising result of adopting continuous deployment?

Page 80: Continuous Deployment: Beyond Continuous Delivery

CONTINUOUS ANYTHING IS GREAT

Page 81: Continuous Deployment: Beyond Continuous Delivery

HAVE CONTINUOUS DEPLYOMENT AS YOUR GOAL

Page 82: Continuous Deployment: Beyond Continuous Delivery

THE FUTURECONTINUOUS DEPLOYMENT

Page 83: Continuous Deployment: Beyond Continuous Delivery

THE FUTURESOFTWARE

Page 84: Continuous Deployment: Beyond Continuous Delivery

THE PAST

2006 (BUILDBOT)

▸ twisted

▸ jinja

▸ simplejson

▸ pysqlite

Page 85: Continuous Deployment: Beyond Continuous Delivery

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!

Page 86: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

PROJECTS HAVE MORE EVERYTHING

▸ More libraries

▸ More frameworks

▸ More API integrations

▸ More frequent deployment

Page 87: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

CONTINUOUS DEPLOYMENT OF

▸ Libraries

▸ Frameworks

▸ Operating systems

Page 88: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

CONTINUOUS DEPLOYMENT OF

▸ Libraries (Google Analytics)

▸ Operating systems (Linux via Ksplice Uptrack)

Page 89: Continuous Deployment: Beyond Continuous Delivery

STOP WASTING TIME TRYING TO KEEP UP

Page 90: Continuous Deployment: Beyond Continuous Delivery

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

Page 91: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

NEXT BIG LANGUAGE/FRAMEWORK

Winner will bewhoever cansustain evolution!

Page 92: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

NEXT BIG LANGUAGE/FRAMEWORK

▸ Built-in support for code migration

▸ Allow libraries to migrate your code when the library changes

Page 93: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

REFACTORING DSL

▸ rename(OldClass, NewClass)

▸ change_signature(foo(x), foo(x,y=null))

▸ six.py

▸ go fmt

SOME HINTS OF THE FUTURE

Page 94: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

NEXT BIG LANGUAGE

▸ Prioritize code changes over static code

Page 95: Continuous Deployment: Beyond Continuous Delivery

THE FUTURE

NEXT BIG LANGUAGE

▸ Prioritize code changes over static code

THANKS!

ANY QUESTIONS?

@TimothyFitz