agile devops: environment automation

Post on 14-Sep-2014

178 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Agile DevOps: Environment Automation with Ben Tomasini, Software Developer, Agile Coach

TRANSCRIPT

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?

Thank You

Ben Tomasinibtomasini@solutionsiq.com

www.solutionsiq.com

top related