Continuous delivery @wcap 5-09-2013

Post on 13-Jan-2015

699 views 1 download

Tags:

description

Release software is no less important than activities that precede it. The Continuous Delivery is a set of practices and methodologies that build an ecosystem for the software development lifecycle. We will see how to build this ecosystem around the applications developed, for which this release activities becomes a low-risk, inexpensive, fast and predictable.

transcript

Continuous Delivery05 - 09 - 2013

David FunaroCTO@Dnsee

@ingdavidino davidfunaro.com

Overview

STARTUP

STARTUP

STARTUP

Testo?

STARTUP

Testo?

Implementation

• is the only phase ?

• it’s really sufficient to release software

Implementation

Implementation

Progettazione

Implementation

Progettazione

Implementation

Analisi

Collaudo

Progettazione

Implementation

Analisi

Collaudo

Progettazione

Implementation

Analisi

Manutezione

Collaudo

Progettazione

Implementation

Analisi

Manutezione

Collaudo

Progettazione

Implementation

Analisi

Manutezione

Software DevelopmentLife Cycle

SW - LC

Feedback

SW - LC

Feedback

• New Features

• Bug fixing

• System specification Changes

• Web services changes

• Customer support tips

Software Evolution

RELEASE

Soft

war

e C

ompo

nent

s ‣Layout ‣Frontend‣Backend‣Api‣Webservices‣...‣...‣...‣Librerie

Changes

RELEASE

FEEDBACK

new features monetize bug

performance layout

RELEASE

? Miss Release Price ?

Reaction MetricsC

hang

e

REL

EASE

Reaction MetricsC

hang

e

REL

EASE

Time interval ...

Security

Skills

Cost

Predictable

Stress

Repeatability

• How many time you need to release software

Time interval ...

• Everything will be ok ?

• Can i be sure that every needed step will be done ?

• Exceptions, are managed ?

• Data migration goes well ?

• Can i go back (rollback) ?

Security

• Have, the selected person, all the skill needed to terminate the procedure ?

• What about his behavior in some exception flow case

Skills

• How many people you need ?

• For how many time ?

• Other Resources ?

Cost

• are able to indicate how much time will care ?

Predictable

• What about the stress

• stress => error-prone

Stress

• Just finish a deploy. Software released. A bug is found. You have to re-start

Repeatability

Reaction Metrics

REL

EASE

Time interval ...

Security

Skills

Cost

Predictable

Stress

Repeatability

Production

Reaction Metrics

REL

EASE

Time interval ...

Security

Skills

Cost

Predictable

Stress

Repeatability

Production

Staging

Reaction Metrics

REL

EASE

Time interval ...

Security

Skills

Cost

Predictable

Stress

Repeatability

Production

Testing

Staging

No Automation Process ?

Lots of things to consider

• Code dependency management

• System evolution management

• Data management and architecture

• Component management

Software Release

• Low Risk

• Cheap

• Frequent

• Rapid

• Predictable

... should be

Continuous Delivery

What we need

• Source Code Management

• Continuous Integration Server

• Automated Deploy

• Real Time Alerting

• Root Cause Analysis

Deploy Pipeline

Commit StageCompileUnitTestAnalysis

Build Installers

ReleaseAutomated acceptance

testign

Automated capacity testing

Manual TestingShowcases

Explorarorytesting

Overview

Commit /push Testing

FAIL

SUCCESS Automated Deploy

Procedure

dev team

ContinuousDelivery

Tools

MethodologiesPractices

Cautions

Anti-patterns

• Deploy software manually

• Manual Configuration

• Deploy to a production-like Env Only after development is complete

Benefits

• Empower Team

• Reducing Errors

• Lowering Stress

• Deployment Flexibility

• Practice Make Perfect

Keep Everything in version control

Automate Almost Everything

Keys

PAUSE

SECTION ISource Code Management

i sent you a mail with the last change

... are you shure ?

i can’t find the new file ?!?

The problem

SCM : What is it ?

3

57

10

Repository

SCM : What it does ?

• Keeping multiple file version

• Collaboration

CHECK POINT

Application Evolution

Sharing

isn’t just for source code

Cautions

you need everything required to re-create your application’s binaries and the environments in

which they run.

How it works

Trunk/Master

Check-in

Push

Local

3

Check-in

Push

Local

34

Local

Check-out

Pull

8

29

Local

Check-out

Pull

8

2

9

Local

Conflict/Resolve

Pull

!3

5

Conflict/Resolve

!

Branching & Merging

Tag

Best Practice

• Little Commit

• Frequent Commit

• Consistent commit

• User Meaningful Commit message

Different Products

DEMO

PAUSE

SECTION IIContinuous Integration

After your commit nothing works anymore

But ... “was working on my computer”

Ops

INTEGRATION PROBLEM

(dopo un commit )

It was working on the stage environment !!!

Ops (dopo un deploy in produzione)

INTEGRATION PROBLEM

sleepless nights before demo ... bug just after release

Cos

t

Analysis Design Implementation Testing Maintenance

Changes

DEFECT BUG≠

Glossary

t

integrazione

Regressione

Working

Broken

t

integrazione

Regressione

Working

Broken

Effort

In software development the components integration need to be tested continuosly...

in order to find inconsistenciesas soon as possible

Good Solution

Continuous Integration

Cont inuous In tegrat ion i s a so f tware development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day.

Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.

Martin Fowler

Requirements

Source Code Management

Requirements

Test Scopes

Agile-Testing-Quadrants

CI Flow

F

CI Flow

F

Checkout last Commit

CI Flow

Build and Tests Process

F

Checkout last Commit

CI Flow

Build and Tests Process

F

F

F

Checkout last Commit

CI Flow

Build and Tests Process

F

F

F

F

F

F

Checkout last Commit

CI Flow

Build and Tests Process

F

F

F

F

F

FF

F

Checkout last Commit

CI Flow

Build and Tests Process

F

F

F

F

F

FF

F

Checkout last Commit

CI Flow

Build and Tests Process

Github Jenkins Hooks

Build & Test

✓ Process creating executable code

✓Unit test

✓Quality criteria

✓ Functional Test

✓Non Functional Test

Valid Syntax Compile

Code behavior

Code coverage, Mass detector

Business Acceptance Criteria

Application performance

PASS

CI - Reduce Risk

• Say goodbye to long and tense integrations

• Increase visibility which enables greater communication

• Catch issues fast and nip them in the bud

• Spend less time debugging and more time adding features

• Proceed in the confidence you’re building on a solid foundation

• Stop waiting to find out if your code’s going to work

• Reduce integration problems allowing you to deliver software more rapidly

CI - Output

System Status Documentation/Artifacts Quality Check

“Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and

remove.”

Martin Fowler

Immediate feedback on the health of the system

DEMO

Team Responsibilities

• Check in frequently• Don’t check in broken code• Don’t check in untested code• Don’t check in when the build is broken• Repair the build as soon as possible

Ci - Best practice

• CI server === Production Server

• Integrate it from the first commit

• Find best way to get notified

Ci - software

... more and more

PAUSA

PARTE IIIAutomated Deploy

Deployment

“is all the activities that make a software system available for use”

Wikipedia

A Critical part of the application life-cycle

Deployment

RELEASE

Real ?

RELEASE

Real ?

RELEASERELEASERELEASERELEASERELEASERELEASERELEASERELEASERELEASERELEASERELEASEfeedback

Deployment

• Low Risk

• Cheap

• Frequent

• Rapid

• Predictable

Low Risk

• Exception catched

• Rollback

• Data on secure

Cheap

• no more than one click

• no more than one person

• no skilled person

Frequent

• to get feedback

Rapid

Predictable

Incomplete ways

Ftp is a deploy procedure ?

Rsync

Rsync is a deploy procedure ?

TeamViewer

Teamviewer is a deploy procedure ?

SCM

$ git pull origin master

$ svn update

Versioning checkout is a deploy procedure ?

• Incomplete

• Manual procedure

• Slow

• Server Downtime

• No data migration

• No Rollback

Problems

Automated Deployment Goals

one click deploy

Deploy

Automated Deployment Goals

AnyTime AnyWhere AnyOne

Automated Deployment Goals

Rollback

Automated Deployment Goals

no downtime

Automated Deployment Goals

Scalable

Frontend 1 Frontend 1I Frontend III

Balancer

Automated Deployment Goals

Deployment Elements

• Executable Code

• Dependency Management

• Software configuration

• Environment Management

• Data Migrations

• Manage Cache

• Manage Assets

Executable code (SCM)

Dependency Management

How you keep updated your libraries dependencies ?

to get the feature 103 done, i use library XXX

ok, i’ll note it here ...

to get the feature 103 done, i use library XXX

OK ..

PIP

Data Migration

What if, after your first production deployment, you have to change the Entity Relationship ?

Software Configuration

How you keep updated your OS componets/libraries ?

to get the feature 103 done, i use library XXX, that require

the module 288

ok, i’ll note it here ...

to get the feature 103 done, i use library XXX, that require

the module 903OK ..

A new way to setup your environment

Write Configuration

Script

Write Configuration

Script

Versionable

Environment Management

Production TestingStaging

Manual - Follow recipe

• Integrity problems

• Problem with exception handling

• Basic Skills requirements

• Time consuming - expensive

• Error - prone

• Stress

Build a custom Script• Do a backup

• Create new directory

• Update the code

• Update dependencies

• Run migration data

• Update Environements

• Warm up cache

• ...

Existing Tools

Fabric

... and more others

• Built in Ruby

• Easy setup

• Event Task based, easy to hook into

• Multiple server

• Multistage extension

• Multiple recipe for different environments

Web deploy Strategy

Document Root

Web deploy Strategy

Document Root

Web deploy Strategy

Document Root

Web deploy Strategy

Document Root

DEMO

Keep Everything in version control

Automate Almost Everything

Thanks