Patterns / Antipatterns
Christoph Schleifer - Twitter: @slueg
changes commited to the mainline are applied to each branch on at least daily basis.
run a single command to build and deploy the application to any accessible environment, including the local development
configuration management of the entire system (source, configuration, environment, data)
any change is a revision in the vcs
fail a build when a project rule is violated - e.g. slow tests, coding standards violations, …
fix software delivery errors asap - stop the line!
no one checks in on a broken build as the fix becomes highest priority
automate the verification and validation of software to include unit, functional, deployment and capacity tests
create a map illustrating the deployment process from check-in to release
agree upon a common scripting language (python, ruby,…)
fail the build as soon as possible. scripts that fail more often should run first and should run as part of the commit stage
the build process provides feedback on common problems as quickly as possible (< 10 minutes)
All deployment processes are written in a script, checked in to the VCS and run as part of the single delivery system
the same deployment script is used for each deployment
provide an automated single command to rollback changes after an unsuccessful deployment
anyone can deploy to any enironment (except for permissions)
automate the configuration of environments to include infrastructure
target environments are as similar to production as possible
deploy new features or services to production but limit access dynamically for testing purposes
Everybody is responsible for the delivery process
You build it, you run it
learn the root cause by asking "why" of each answer until discovering the root cause