Continuous deployment

128
Continuous Deployment Òscar Vilaplana @grimborg [email protected] DjangoCon EU 2013

description

When you do Continuous Deployment you can deploy whenever you want: you made it as easy as possible and you have become very good at it. Every engineer knows how to deploy the application to any environment. The Product Department can always see the latest bells and whistles as they are built because you have Stable servers running the latest versions of the application. You implement big changes gradually and show them to Product while keeping the customer's experience stable. When you decide to release, you have made sure all things will work and you know how to react if nevertheless they break, without fires or panic. Continuous Deployment also forces you to do many right things: repeatable builds; the exact same deployment process in all environments, including the developer's machines and a development environment that is as close to Live as possible; backwards-compatible database changes; easy rollbacks; code that is split into components; good tests... In this talk I give an introduction to Continuous Deployment: why you should care, what it means and I propose a few first steps towards introducing this methodology. I presented this talk at DjangoCon EU 2013.

Transcript of Continuous deployment

Page 1: Continuous deployment

ContinuousDeployment

Òscar Vilaplana@[email protected] DjangoCon EU 2013

Page 2: Continuous deployment

"""We're hiring!"""from paylogic import (code, highavailability, challenge)from netherlands import (fun, nature, bikes, beer)

def hire(you): email('[email protected]', you.cv) return challenge.accept()

Page 3: Continuous deployment
Page 4: Continuous deployment
Page 5: Continuous deployment

"""We're hiring!"""from paylogic import (code, highavailability, challenge)from netherlands import (fun, nature, bikes, beer)

def hire(you): email('[email protected]', you.cv) return challenge.accept()

Page 6: Continuous deployment

intro

Page 7: Continuous deployment

deploy

Page 8: Continuous deployment

easy

Page 9: Continuous deployment

good at it

Page 10: Continuous deployment

everyone

Page 11: Continuous deployment

Product Owner

Page 12: Continuous deployment

Stable

Page 13: Continuous deployment

latest versions

Page 14: Continuous deployment

big changes

Page 15: Continuous deployment

gradually

Page 16: Continuous deployment

acceptance

Page 17: Continuous deployment

stable

Page 18: Continuous deployment

works

Page 19: Continuous deployment

Done

Page 20: Continuous deployment

breaks

Page 21: Continuous deployment

don't panic

Page 22: Continuous deployment

forces

Page 23: Continuous deployment

Right Things

Page 24: Continuous deployment

repeatable

Page 25: Continuous deployment

identical

Page 26: Continuous deployment

deployment

Page 27: Continuous deployment

environments

Page 28: Continuous deployment

backwardscompatible

Page 29: Continuous deployment

rollback

Page 30: Continuous deployment

components

Page 31: Continuous deployment

tests

Page 32: Continuous deployment

yes it does!

Page 33: Continuous deployment

start working

Page 34: Continuous deployment

energy

Page 35: Continuous deployment

download

Page 36: Continuous deployment

setup.py

Page 37: Continuous deployment

broken

Page 38: Continuous deployment

dependency

Page 39: Continuous deployment

pip install

Page 40: Continuous deployment

setup.py

Page 41: Continuous deployment

nope

Page 42: Continuous deployment

docs&

hack

Page 43: Continuous deployment

for(;;)

Page 44: Continuous deployment

pip uninstall giveafuck

Page 45: Continuous deployment
Page 46: Continuous deployment
Page 47: Continuous deployment
Page 48: Continuous deployment

Life life = new Life()

Page 49: Continuous deployment
Page 50: Continuous deployment
Page 51: Continuous deployment
Page 52: Continuous deployment
Page 53: Continuous deployment
Page 54: Continuous deployment

taming a lion1800s

Page 55: Continuous deployment

beat into submissionfear

guns & whipsconfusion

Page 56: Continuous deployment

taming a lionpresent

Page 57: Continuous deployment

understandconditioning

behaviour → signalreward

trust

Page 58: Continuous deployment

taming a lion1800s

Page 59: Continuous deployment

beat into submissionfear

guns & whipsconfusion

Page 60: Continuous deployment

deploy by hand, hackfear

guns & whipsconfusion

Page 61: Continuous deployment

deploy by hand, hackbut it works!guns & whips

confusion

Page 62: Continuous deployment

deploy by hand, hackbut it works!

hack till it worksconfusion

Page 63: Continuous deployment

deploy by hand, hackbut it works!

hack till it worksspecial decisions

Page 64: Continuous deployment
Page 65: Continuous deployment

taming a lionpresent

Page 66: Continuous deployment

understandconditioning

behaviour → signalreward

trust

Page 67: Continuous deployment

deploy: hardconditioning

behaviour → signalreward

trust

Page 68: Continuous deployment

deploy: hardCI

behaviour → signalreward

trust

Page 69: Continuous deployment

deploy: hardCI

push → test → greenreward

trust

Page 70: Continuous deployment

deploy: hardCI

push → test → greenhappytrust

Page 71: Continuous deployment

deploy: hardCI

push → test → greenhappy

it works in Live

Page 72: Continuous deployment
Page 73: Continuous deployment

what you needwhat you need

Page 74: Continuous deployment

team

Page 75: Continuous deployment

working software

Page 76: Continuous deployment

repeatable build

Page 77: Continuous deployment

deployment

Page 78: Continuous deployment

rollback

Page 79: Continuous deployment

release

Page 80: Continuous deployment

team

Page 81: Continuous deployment

committedto

quality

Page 82: Continuous deployment

processcan't

compensate

Page 83: Continuous deployment

pip installgiveafuck

Page 84: Continuous deployment

everyonedeploys

Page 85: Continuous deployment

identicalenvironment

Page 86: Continuous deployment

everyoneis

responsible

Page 87: Continuous deployment

learn

Page 88: Continuous deployment

workingsoftware

Page 89: Continuous deployment

tests

Page 90: Continuous deployment

unit tests

functional tests

acceptance tests

Page 91: Continuous deployment

acceptance:

user'sviewpoint

Page 92: Continuous deployment

continuousintegration

Page 93: Continuous deployment

quickreliable

Page 94: Continuous deployment

slow test: fail

Page 95: Continuous deployment

no pylint: fail

Page 96: Continuous deployment

keep it green

Page 97: Continuous deployment

check in often

always ready torollback

Page 98: Continuous deployment

responsible:dev + qa

Page 99: Continuous deployment

quality

Page 100: Continuous deployment

broken:triage

Page 101: Continuous deployment

right now

vs

asap

Page 102: Continuous deployment

repeatablebuild

Page 103: Continuous deployment

automated

Page 104: Continuous deployment

used by everyoneeverywhere

Page 105: Continuous deployment

no manual changes

Page 106: Continuous deployment

deploymentscript

Page 107: Continuous deployment

used by everyoneeverywhere

Page 108: Continuous deployment

deploy.sh<environment>

<version>

Page 109: Continuous deployment

not just code

configurationinfrastructure

Page 110: Continuous deployment

always followpipeline

Page 111: Continuous deployment

even on emergencies

Page 112: Continuous deployment

buggy changesunknown stateirreproducible

what went wrong?

Page 113: Continuous deployment

what went wrong?

Page 114: Continuous deployment

rollback

Page 115: Continuous deployment

blue-greengreen is live

release to bluetest, accept

blue is new green

Page 116: Continuous deployment

canary

show new versionto a few

Page 117: Continuous deployment

database:keep backwards-

compatible

Page 118: Continuous deployment

release

Page 119: Continuous deployment

last stepautomatic

Page 120: Continuous deployment

small changesfrequent

experience

less risk

Page 121: Continuous deployment

maybenot for you

Page 122: Continuous deployment

tips

Page 123: Continuous deployment

split in components

Page 124: Continuous deployment

rehearse releases

get very goodat them!

Page 125: Continuous deployment

infrastructure

manage and test

Page 126: Continuous deployment

all environments equal

use vagrant

Page 127: Continuous deployment

automate everything

(not possible?document)

Page 128: Continuous deployment

Questions?Answers?

@[email protected] Thank you!