Agile DevOps: Environment AutomationBen TomasiniSoftware Developer, Agile Coach
First Principles
Our highest priority is to satisfy the customerthrough early and continuous deliveryof valuable software.
http://agilemanifesto.org
SoftwareSoftware
EnvironmentEnvironment
Necessary FocusDevelopers must also support the operational use of their software — a combination that’s become known as “devops.” This further motivates writing good code and testing it thoroughly. Developers’ personal stake in keeping the system running smoothly complements the engineering procedures and lets the system maintain quality at scale. Methodologies and tools aren’t enough by themselves because they can always be misused. Thus, a culture of personal responsibility is critical.
Kent Beck - Facebook - https://www.facebook.com/publications/514128035341603
Environmental Impediments•Ubiquitous in Agile initiatives
•Common impediment at stand-ups at this moment
•Unavailable environments
•Costly to spin up another test environment
• Inconsistent and stale configurations - system failures
•Communication barriers between development and operations
Agile Dev OpsContinuous DeliveryShort Cycle TimesFocus on Quality
Low Technical DebtIndividuals and Interactions
Delivery and maintenance of
the software product
AgileDelivery and
maintenance of the systems on
which the software product
runs
How can we apply Agile practices to both?
Complementary Delivery Pipelines
A Deeper Vertical Slice?
UIUI
Business LogicBusiness Logic
Data AccessData Access
Server EnvironmentServer Environment
<< User Stories
It’s all software now ...
•Virtualization has revolutionized system operations
•We have historically run our software on systems, now lets use software to build those systems
•Let’s apply known practices to both application development and system development
•Let’s develop our systems - using build automation, TDD, and CI
Three reasons why this won’t work :)
•Reason 1: System provisioning is much more variable than building software
•Reason 2: Systems are more heavyweight than software artifacts
•Reason 3: Doing this involves possibly unfamiliar tools and skills
• Operations write software? That’s for developers.
• Developers manage systems? That’s for operations.
Too variable ?
•Traditional system provisioning involves
•Many steps
•Specialized knowledge
•Manual input
•One solution: make provisioning deterministic
Deterministic Process
Inputs OutputsProcessProcess(closed (closed system)system)
The inputs guarantee the outputs
No “hidden” inputs
Only automate a deterministic system
Use tests to assert outputs
Opscode Chef
•Environment automation solution
•Cook up servers with recipes
•Free and Open Source
•Vibrant Community
• Influenced by Puppet, which was influenced by CFEngine
Too heavyweight ?
•Solution: lightweight virtualization tools
•Abstract away the hardware
•Command line integrates with build system
http://dev.devops1.solutionsiq.com
Too unfamiliar?
•Explore new areas:
•Developers - Learn sysamin stuff - bash, init.d scripts, managing public keys, vi instead of Eclipse
•System engineers - Dig into software development - Ruby, Java, TDD
•Embrace new tools
•Dev/Ops collaboration - pairing, post release retrospectives
Questions?