View
1.284
Download
3
Category
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
DO: KNOW WHAT IS WHERE
@ags313#DV13-cda
DO: KNOW WHAT IS WHERE(have a dashboard)
@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