Continuous delivery the french way Agile Cambridge 2014

Post on 28-Nov-2014

762 views 0 download

description

We detail the way LesFurets.com is organised to deliver daily new features. This session was performed at Agile Cambridge 2014

Transcript of Continuous delivery the french way Agile Cambridge 2014

Dimitri BAELI - Arnaud PFLIEGER https://github.com/lesfurets

CONTINUOUSDELIVERYTHE FRENCH WAY

LESFURETS.COM22 software engineers3 Devops (automation & operations)1 Architect

LESFURETS.COM1 website, 6 product lines400k lines of code, 30k Unit tests200 Selenium tests10+ Servers1 code base

IN 201211 RELEASES

Mind set:Plan/Estimate/Code/Test/Release monthly

IN 2014143 RELEASES

Mind set:Ship what is READY the next day

IN 2012Scrum sprints ended by a releaseSubversion : trunk + 1 maintenance branchBuild : 15min, Selenium in a grid: 200 in 1hTesting phase : 4-6 days, Deployment in 2hCommit to Prod : from 5d to 4 weeks

IN 2014Lean KanbanDaily releasesGIT : master + feature branchesBuild : 3' (was 15') + Selenium : 10' (was 1h)Release : 5min + 30min monitoringCommit to Prod : coding time + 1 day

A FEW THINGS WE READ

AGILE MANIFESTOPRINCIPLE 3

"Our highest priority is to satisfy the customer through early and continuous delivery ofvaluable software."

PRODUCT DEVELOPMENT FLOWDON REINERTSEN

Work with a flowManage Queues of workLead Time more than work durationReduce per release costs

CONTINUOUS DELIVERYJEZ HUMBLE, DAVID FARLEY

1. Fast builds2. Pre-Commit check (all tests ever ok)3. Simple and fast automated deployments4. Production monitoring and alerting5. Root Cause Analysis

DELIVER EARLY, DELIVER OFTEN

Source: http://paulhammant.com/2013/03/13/facebook-tbd-take-2/

KANBAN : EVOLUTIONARY CHANGEDAVID ANDERSON

Visualize the workLimit the Work in ProcessExplicit RulesContinuous ImprovementLeadership

HOW GOOGLE TEST SOFTWAREJAMES WHITAKER

NoQA : Quality EngineeringSET : build test tools for devsDev QA their own changes

GIT FLOWVINCENT DRIESSEN

A successful git branching modelhttp://nvie.com/posts/a-successful-git-branching-model/

START BYFINISHING !

BECAUSE FRENCH GUYS AREDOING EVERYTHING BACKWARD

CONTINUOUS DELIVERY1. Operations2. Delivery3. Validation4. Continuous integration5. Analysis & Coding : Branch

OPERATIONSTECHNICAL MONITORING AND ALERTING

OPERATIONSFUNCTIONAL MONITORING AND

ALERTING

DELIVERY

AUTOMATE

"Infrastructure as code"

Code

Conf

SQL

LocalPre-prod Prod

DEPLOYMENT

0 downtime

Blue/green

Doubled production environmentLoadbalancer

User LoadbalancerProduction 1

Production 2Database

version N

version N+1

VALIDATIONManual testsRegression Testing : ZenoSeleniumCode reviewsShowcase/functional validation

ZENOVISUAL REGRESSION

SELENIUM

SELENIUMPage Object PatternFluent API (FluentLenium like)Selenium in the sky with LXC200 Selenium tests in <10min

CONTINUOUS INTEGRATIONIMPACTS THE CODEBASE

CONTINUOUS INTEGRATIONBRANCHING MODEL

Trunk + Release branchTrunk based (all commits to master + toggle)Feature Branching + Merge when ready

CONTINUOUS INTEGRATION

Deliver ...when it's ready

FEATURE BRANCHING

CONTINUOUS INTEGRATIONON EVERY COMMIT

CompilationAutomated testsContinuous Merge (Octopus)

CONTINUOUS MERGE

octopus

master feature A feature B

octopus

master feature A

feature B

octopus

master feature A

feature Bdisposablecommit

CONTINUOUS MERGEBuild a test environmentDetect conflictsPlug/unplug branches easilyGit Octopus Merge

MANAGING CONFLICTS

Avoid conflicts vs Resolve conflicts

MANAGING CONFLICTS

A LOT OF OPTIONS

Remove the conflicting branch (put aside, comeback later)Find a way to make it mergeMerge branches in conflict (resolve the conflict)Merge in master (+ merge everywhere)

Merge is the worst case (default in trunk based development)

30 BRANCHES AT WORK !

EXCEPTIONS TO THE BRANCHING MODELFeature togglesBig refactorings

FEATURE TOGGLE

When ?

Lots of conflictsLong term branch

BIG REFACTORINGSToo many conflictsLong term task

Special treatmentBlocks the release

THANK YOU TOArnaud: let's see if branching really fails (octopus)Mehdi: I bet it won't work (bet accepted !)Matthieu: Perceptual Diff ? ok let's tryThomas: Docker+RamFS for the Selenium Grid (1h -> 10min)Andreï/Julien: Fluent Selenium Page Object generationEmmanuel: Ok for some bugs in production, but fix them fastGilles: Go, go, go !And all the devteam to jump in deep end so easily

ONE MORE THINGFork us on GitHub

Selenium in the sky with LXCGit Octopus - Continuous MergingAnd more soon ...Follow us cousins of

http://github.com/lesfurets

@BeastieFurets @ctmersselenium-in-the-sky-with-lxc@ctmers

THANK YOU