Continuous Delivery Antipatterns

Preview:

DESCRIPTION

Continuous Delivery Antipatterns slides from this year's Devoxx, enjoy!

Citation preview

@ags313#DV13-cda

Continuous Delivery Antipatterns

Andrzej Grzesik ebay

@ags313#DV13-cda

cd antipatterns; ls -alAndrzej Grzesik

ebay

Demo

@ags313#DV13-cda

@ags313

andrzej@grzesik.it

andrzejgrzesik.info

Andrzej Grzesik

@ags313#DV13-cda

MY OPINIONS ARE MY OWNdisclaimer

@ags313#DV13-cda

ABOUT:MEI’m proud of:

@ags313#DV13-cda

I HATE COMPUTERSdisclaimer ;-)

@ags313#DV13-cda

QUESTIONS?

@ags313#DV13-cda

NO! 42

IT DEPENDSanswers!

@ags313#DV13-cda

QUESTIONS?ask them right away!

@ags313#DV13-cda

#DEVOXXkeep on tweeting!

@ags313#DV13-cda

TL; DR: RELEASE MORE OFTEN!

and don’t listen to ‘no-can-do’s

@ags313#DV13-cda

SOFTWAREis a people problem

@ags313#DV13-cda

IN THE BEGINNING

@ags313#DV13-cda

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

@ags313#DV13-cda

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

@ags313#DV13-cda

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

agile manifesto, 2001

@ags313#DV13-cda

DELIVERY IS ORGANIZATION-SPECIFIC

@ags313#DV13-cda

CHANGE SCENARIO

@ags313#DV13-cda

1. PRIORITIZE PROBLEMS

@ags313#DV13-cda

2. FIX FIRST

@ags313#DV13-cda

REPEAT

@ags313#DV13-cda

A LONG TIME AGO IN A GALAXY FAR, FAR AWAY…

@ags313#DV13-cda

SYSTEM (TM)

@ags313#DV13-cda

DEVELOPERS

@ags313#DV13-cda

DEVELOPERSeverywhere-sourced

@ags313#DV13-cda

OH, WAIT

@ags313#DV13-cda

@ags313#DV13-cda

PUSH THEIR CODE

@ags313#DV13-cda

SITE BREAKS

@ags313#DV13-cda

SITE BREAKSfor two days

@ags313#DV13-cda

DURING HOT SEASON

@ags313#DV13-cda

ALL ROLL-BACK!

@ags313#DV13-cda

TO WHERE?

@ags313#DV13-cda

FROM WHERE?

@ags313#DV13-cda

PROBLEM: NO IDEA WHAT IS WHERE

@ags313#DV13-cda

GIT PUSH --FORCE PROD#randomhashisbetterthannone

@ags313#DV13-cda

DO: --VERSION

@ags313#DV13-cda

BETTER: DO SEMANTIC VERSIONING

http://semver.org/

@ags313#DV13-cda

DO: KNOW WHAT IS WHERE

@ags313#DV13-cda

DO: KNOW WHAT IS WHERE(have a dashboard)

@ags313#DV13-cda

GLUhttps://github.com/pongasoft/glu

@ags313#DV13-cda

PROBLEM: MANY TEAMS/UNSTABLE CODE

@ags313#DV13-cda

MULTIPLE REPO IS OKone for dev, one for releases

@ags313#DV13-cda

GIT FLOW IS OKhttp://nvie.com/posts/a-successful-git-branching-model/

@ags313#DV13-cda

PERSONAL FAVOURITE: STABLE MASTER

@ags313#DV13-cda

BUSINESS CONCLUSION:

@ags313#DV13-cda

@ags313#DV13-cda

RELEASES == RISKlet’s avoid them!

@ags313#DV13-cda

WHAT DO YOU GET?

@ags313#DV13-cda

PROBLEM: FEAR OF RELEASING

@ags313#DV13-cda

STAGNATION CREEPS IN

@ags313#DV13-cda

QUIET PERIODS

@ags313#DV13-cda

RELEASE ‘TRAINS’

@ags313#DV13-cda

RC, BETA, GOLD

@ags313#DV13-cda

SOLUTION: INVOLVE BUSINESSa.k.a. ‘manage stakeholders’

@ags313#DV13-cda

SMALL CHANGES SHOULD HAPPEN QUICKLY

great selling point

@ags313#DV13-cda

BUILD ENVS

@ags313#DV13-cda

OK, LET’S HAVE A PIPELINE

@ags313#DV13-cda

PROBLEM: SLOW

@ags313#DV13-cda

@ags313#DV13-cda

SOLUTION: PARALELLIZE

@ags313#DV13-cda

WHICH PART?

@ags313#DV13-cda

@ags313#DV13-cda

FREE WIN: DECOUPLED DESIGN

@ags313#DV13-cda

PROBLEM: RECOMPILING

@ags313#DV13-cda

@ags313#DV13-cda

@ags313#DV13-cda

@ags313#DV13-cda

HOW DO I REPLICATE PRODUCTION?

@ags313#DV13-cda

DO: USE A BINARY REPOSITORY

@ags313#DV13-cda

PROBLEM: SEPARATE TEAMS

@ags313#DV13-cda

RELEASE TEAMdealing with ‘danger‘

@ags313#DV13-cda

SYMPTOM: DEALING WITH DANGER

@ags313#DV13-cda

LIKES TO BE MANUAL‘job security‘

@ags313#DV13-cda

US VS THEM‘leave me alone, I’m important’

@ags313#DV13-cda

RELEASE PROCESSES

@ags313#DV13-cda

CURIOUS RELEASE PROCESSES

@ags313#DV13-cda

WORK EXPANDS TO FILL THE TIME AVAILABLE FOR ITS COMPLETION

Parkinson’s Law

@ags313#DV13-cda

TOO CURIOUS PROCESSES LEAD TO

@ags313#DV13-cda

UNOFFICIAL RELEASES

@ags313#DV13-cda

UNOFFICIAL RELEASES(don’t do them)

@ags313#DV13-cda

BUNKERS

@ags313#DV13-cda

@ags313#DV13-cda

SOLUTION: ENCOURAGE INTERACTIONS

@ags313#DV13-cda

BREAK && INTEGRATE

@ags313#DV13-cda

BREAK && INTEGRATErepeatedly

@ags313#DV13-cda

GAMES ARE AWESOME!repeat the event

@ags313#DV13-cda

PROBLEM: MANUAL INFRASTRUCTURE

@ags313#DV13-cda

INFRASTRUCTURE

@ags313#DV13-cda

WE USE CHEF, WE’RE SAFE^^

@ags313#DV13-cda

@ags313#DV13-cda

DID YOU TEST?

@ags313#DV13-cda

@ags313#DV13-cda

FOOD CRITIClint for chef

@ags313#DV13-cda

lint for chef

@ags313#DV13-cda

PUPPET VS CHEF VS …

@ags313#DV13-cda

PROBLEM: ENV BUILDS

@ags313#DV13-cda

SLOW?

@ags313#DV13-cda

@ags313#DV13-cda

PROBLEM: INTERNET

@ags313#DV13-cda

QUIZ

@ags313#DV13-cda

@ags313#DV13-cda

NEED INTERNET TO BUILD?

@ags313#DV13-cda

OF COURSE!

@ags313#DV13-cda

@ags313#DV13-cda

RUBYGEMS.ORG CPAN.ORG

MAVEN.ORG

@ags313#DV13-cda

RUBYGEMS.ORG CPAN.ORG

MAVEN.ORGgo down!

@ags313#DV13-cda

MAKE YOUR BUILD RUN WITHOUT INTERNET

or at least try, you’ll learn fun things :-)

@ags313#DV13-cda

APPLICATION AND ENVIRONMENT

@ags313#DV13-cda

SAVE TIME AND NERVES

@ags313#DV13-cda

BINARY REPO/PROXY/…

@ags313#DV13-cda

PROBLEM: NO RUNTIME UPGRADE

@ags313#DV13-cda

@ags313#DV13-cda

@ags313#DV13-cda

@ags313#DV13-cda

DESKTOPS

@ags313#DV13-cda

@ags313#DV13-cda

FIREFOX IS UPDATINGand you can not use it

@ags313#DV13-cda

MOBILE APPS

@ags313#DV13-cda

WEBVIEW IS NICE

@ags313#DV13-cda

FREQUENT RELEASESmake your user curious

@ags313#DV13-cda

MAKE USERS SAY BYE

@ags313#DV13-cda

CHANGE BACKEND YOU CAN

@ags313#DV13-cda

FORCING DOESN’T WORK

@ags313#DV13-cda

ASK IF NEW FEATURES THEY WANT

@ags313#DV13-cda

PROBLEM: DEPLOYMENT FAILURES

@ags313#DV13-cdaidea from: paulklipp.com/blog

@ags313#DV13-cda

DEPLOYMENTSDO YOU TRACK THEM?

@ags313#DV13-cda

FAILED DEPLOYMENT PROCEDUREROLLBACK? OR DOWNTIME?

@ags313#DV13-cda

DO: TEST YOUR ROLLBACK

@ags313#DV13-cda

AS YOU TEST YOUR BACKUPS

@ags313#DV13-cda

PROBLEM: STATE

@ags313#DV13-cda

LONG RUNNING ……

@ags313#DV13-cda

SAGAS?

http://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf

@ags313#DV13-cda

DATABASES…

@ags313#DV13-cda

ENVIRONMENTS

@ags313#DV13-cda

LOVE PARTIAL FAILURES

@ags313#DV13-cda

DO: BUILD IN SWITCHES

@ags313#DV13-cda

DO: APP IS ENV AWARE

@ags313#DV13-cda

DEVENV

@ags313#DV13-cda

AUTOMATE IT!

@ags313#DV13-cda

CHEF, PUPPET, ANSIMBLE, DOCKER, VAGRANT

pick any

@ags313#DV13-cda

package "haproxy" do!action :install!

end!!template "/etc/haproxy/haproxy.cfg" do!source "haproxy.cfg.erb"!owner "root"!group "root"!mode 0644!notifies :restart, "service[haproxy]"!

end!!service "haproxy" do!supports :restart => true!action [:enable, :start]!

end!

@ags313#DV13-cda

RELEASE!

@ags313#DV13-cda

RELEASE!…the Kraken

@ags313#DV13-cda

@ags313#DV13-cda

thanks!

@ags313#DV13-cda

thanks!please tweet && feedback!

Recommended