Upload
perforce
View
1.823
Download
1
Embed Size (px)
DESCRIPTION
Continuous delivery is on its way to becoming standard practice for software projects where quality, stability, and time-to-market are paramount. In this talk, Jez will explain the why and what of continuous delivery, discuss the effect of continuous delivery on version control process and practice for teams of all sizes, and explore the implications for practitioners.
Citation preview
@jezhumble 10 september 2014
continuous delivery
scrum-
fall
water-
s
what is continuous delivery?
reduce the cost, time, and risk of delivering incremental changes to users while improving quality
production-ready software
fast, automated feedback on the production readiness of your applications every time there is a change — to code, infrastructure, or configuration
architecture
patterns and practices
collaboration
continuous delivery
configuration management
continuous integration
automated testing
ingredients
Mainline Server
Develop
Build
Build
pull
Local Workstation
Buildpush
✔Done!
© @martinfowler
Mainline Server
Develop
Build
Build
pull
Local Workstation
Buildpush
✔Done!
Everyone Commits To
the Mainline Every Day
© @martinfowler
P1 P2
G2G1
B1
B1
B1
P1-2
G1-2
G3 G4
P4
B2
P5
G5 G6
B2
P3-4
G3
B2
P3
Professor Plum
Reverend Green
Mainline
Feature Branching
© @martinfowler
P1 P2
G2G1
B1
B1
B1
P1-2
G1-2
G3 G4
P4
B2
P5
G5 G6
B2
P3-4
G3
B2
P3
Professor Plum
Reverend Green
Mainline
G1-6
P1-5
P1-5
G1-6
Feature Branching
© @martinfowler
P1 P2
G2G1
B1
B1
B1
P1-2
G1-2
G3 G4
P4
B2
P5
G5 G6
B2
P3-4
G3
B2
P3
Professor Plum
Reverend Green
Mainline
G1-6
P1-5
P1-5
G1-6
Feature Branching
© @martinfowler
P1 P2
G2G1
B1
B1
B1
P1-2
G1-2
G3 G4
P4
B2
P5
G5 G6
B2
P3-4
G3
B2
P3
Professor Plum
Reverend Green
Mainline
G1-6
P1-5
P1-5
G1-6
Feature Branching
© @martinfowler
P1 P2
G2 G3G1 G4
P3 P4 P5
G5 G6
B1 B2
G1
G1
P1
P1B1
P2
B1
P1-2
G2
G2
P3
G2
P3
B2
P4
B2
G3
P3G3
G3
P4
P4 P5
P4-5
G4
G4 G5 G6
P2
Professor Plum
Reverend Green
Mainline
Continuous Integration
© @martinfowler
P1 P2
G2 G3G1 G4
P3 P4 P5
G5 G6
B1 B2
G1
G1
P1
P1B1
P2
B1
P1-2
G2
G2
P3
G2
P3
B2
P4
B2
G3
P3G3
G3
P4
P4 P5
P4-5
G4
G4 G5 G6
P2
Professor Plum
Reverend Green
Mainline
P1 P2
G2G1
B1
B1
B1
P1-2
G1-2
G3 G4
P4
B2
P5
G5 G6
B2
P3-4
G3
B2
P3
Professor Plum
Reverend Green
Mainline
G1-6
P1-5
P1-5
G1-6
Continuous Integration
Feature Branch
© @martinfowler
Continuous Integration
Feature Branch
© @martinfowler
Feature Branch
Release Branch
Experimental Branch
© @martinfowler
Grand Prize Fight
© @martinfowler
BAM
Feature Branching
Continuous Integration
Big Scary Merge
© @martinfowler
P1 P2
G2 G3G1 G4
P3 P4 P5
G5 G6
B1 B2
G1
G1
P1
P1B1
P2
B1
P1-2
G2
G2
P3
G2
P3
B2
P4
B2
G3
P3G3
G3
P4
P4 P5
P4-5
G4
G4 G5 G6
P2
Professor Plum
Reverend Green
Mainline
P1 P2
G2G1
B1
B1
B1
P1-2
G1-2
G3 G4
P4
B2
P5
G5 G6
B2
P3-4
G3
B2
P3
Professor Plum
Reverend Green
Mainline
G1-6
P1-5
P1-5
G1-6
Continuous Integration
Feature Branch
© @martinfowler
BAM
Feature Branching
Continuous Integration
Big Scary Merge
BIFF Untrusted Contributers
© @martinfowler
BAM
Feature Branching
Continuous Integration
Big Scary Merge
BIFF Untrusted Contributers
POW !
In-progress features
© @martinfowler
[featureToggles]wobblyFoobars: trueflightyForkHandles: false
Config File
<toggle name=wobblyFoobars> ... various UI elements</toggle>
some.jsp
forkHandle = (featureConfig.isOn(‘flightlyForkHandles)) ? new FlightyForkHander(aCandle) : new ForkHandler(aCandle)
other.java
Feature Toggles
© @martinfowler
Branch by Abstraction
© @martinfowler
Application
New!Library
Library
© @martinfowler
Application
New!Library
Library
Interface implements
© @martinfowler
Application
New!Library
Library
Interface implements
© @martinfowler
Application
New!Library
Library
Interface implements
© @martinfowler
Application
New!Library
Interface implements
© @martinfowler
BAM
Feature Branching
Continuous Integration
Big Scary Merge
BIFF Untrusted Contributors
POW !
In-progress features
KA-POW!
No Refactoring
© @martinfowler
P1 P2
G2 G3G1 G4
P3 P4 P5
G5 G6
B1 B2
G1
G1
P1
P1B1
P2
B1
P1-2
G2
G2
P3
G2
P3
B2
P4
B2
G3
P3G3
G3
P4
P4 P5
P4-5
G4
G4 G5 G6
P2
Professor Plum
Reverend Green
Mainline
P1 P2
G2G1
B1
B1
B1
P1-2
G1-2
G3 G4
P4
B2
P5
G5 G6
B2
P3-4
G3
B2
P3
Professor Plum
Reverend Green
Mainline
G1-6
P1-5
P1-5
G1-6
Continuous Integration
Feature Branch
© @martinfowler
BAM
Feature Branching
Continuous Integration
Big Scary Merge
BIFF Untrusted Contributors
POW !
No Refactoring
KA-POW!
In-progress features
© @martinfowler
continuous integration
Jason Leyba | http://www.infoq.com/presentations/google-test-automation
build quality in
“Cease dependence on mass inspection to achieve quality. Improve the process and build quality into the product in the first place” !
W. Edwards Deming
different kinds of testing
Functional acceptance tests
ShowcasesUsability testing
Exploratory testing
Unit testsIntegration tests
System tests
Non-functional acceptance tests
(performance, scaling, ...)
Business facing
Technology facing
Critiq
ue p
roje
ct
Support
pro
gra
mm
ing
AUTOMATED
AUTOMATED
MANUAL
MANUAL / AUTOMATED
Diagram invented by Brian Marick
visibility
an automated implementation of your system’s build, deploy, test, release process
control
feedback
deployment pipeline
deployment pipeline
Delivery team Version control Build & unit tests
Automated acceptance tests
User acceptance tests
Release
Check in
Feedback
Trigger
Check in
Feedback
Trigger
Trigger
Check inTrigger
Trigger
ApprovalApproval
Feedback
Feedback
FeedbackFeedback
infrastructure as code
high performing IT is a competitive advantage
“Firms with high-performing IT organizations were twice as likely to exceed their profitability, market share and productivity goals.”
http://bit.ly/2014-devops-report
lead time
“How long would it take your organization to deploy a change that involved just one single line of code? Do you do this on a repeatable, reliable basis?”
Mary and Tom Poppendieck, Implementing Lean Software Development, p59.
time to restore service
http://martinfowler.com/bliki/PhoenixServer.html
highest correlation with IT performance
!
• “Our app configurations are in a version control system” • “Our system configurations are in a version control system” • “Our app code is in a version control system” • “We get failure alerts from logging and monitoring systems” • “Developers merge their code into trunk daily” • “When development and operations teams interact, the outcome is
generally win/win.” • “Developers break up large features into small, incremental changes.”
questions@jezhumble | [email protected] http://continuousdelivery.com/
!
© 2014 Chef, Inc. & ThoughtWorks, Inc.