Continuous Delivery chez LesFurets -- Deep dive Dec 2015

download Continuous Delivery chez LesFurets -- Deep dive Dec 2015

If you can't read please download the document

Transcript of Continuous Delivery chez LesFurets -- Deep dive Dec 2015

  • Livrer chaque jour ce qui est prtContinuous Delivery & Continuous Merge

  • Contexte

  • @BeastieFurets#LesFuretsContinuous

    1er site indpendant de comparaison dassurance :

    Lanc en 2012

    2,5M de devis par an

    31% du march de la comparaison de contrats auto

  • @BeastieFurets#LesFuretsContinuous4

  • @BeastieFurets#LesFuretsContinuous

    Application 6 produits :

    Java (tomcat) & GWT (client) 400k LOC & 40k tests unitaires 200 tests Selenium 22 Devs & Tech Leads, 2 Ops, 2 Managers

  • Livrer plus souvent

  • @BeastieFurets#LesFuretsContinuous

    Rythme 2012 - Mensuel12 releases

    Lesprit :

    planifier / estimer / coder / tester / liver de manire mensuelle

    Sprints

  • @BeastieFurets#LesFuretsContinuous

    Lancienne organisation en SCRUM classique :

    Sprints dun mois, Planification au mois, Recette 1 semaine

    Build : 15 minutes

    200 Seleniums : 1 heure

    Blocages : Build + Selenium + Recette

    Rythme 2012 - Mensuel

  • @BeastieFurets#LesFuretsContinuous

    Rythme 2013 - Mois + Sem45 releases

    Lesprit :

    planifier / estimer / coder / tester liver de manire mensuelle

    Sprints + Bonus Dploiement chaque semaine (cherry-pick)

  • @BeastieFurets#LesFuretsContinuous

    Livraison mensuelle + cherry-pick chaque semaine en bonus

    Amliorations:

    Build : 3 minutes (contre 15 minutes)

    Blocages:

    Selenium + Recette

    Rythme 2013 - Mois + Sem

  • @BeastieFurets#LesFuretsContinuous

    Rythme 2014/15 - Quotidien208 releases en 2014 (dj 150 en 2015)

    Lesprit :

    livrer ce qui est prt aujourdhui tous les jours !

    Marathon

  • @BeastieFurets#LesFuretsContinuous

    Livraison mensuelle + cherry-pick chaque semaine en bonus Amliorations:

    Selenium : 10 minutes + Zeno (regressions graphiques) Blocages:

    Temps de release (2-3h par 1 dev) Risque par release (15d / release en moyenne)

    Rythme 2014/15 - Jour

  • @BeastieFurets#LesFuretsContinuous

    0"

    20"

    40"

    60"

    80"

    100"

    120"

    140"

    160"

    10" 20" 30" 40" 50" 60" 70" 80" 90" 100" 250" 500" 1000" 5000" 5000"

    Histogramme"du"nombre"de"modifica

  • @BeastieFurets#LesFuretsContinuous

    Objectif 2016 - Par feature500+ releases en 2016 (dj 150 en 2015)

    Lesprit :

    livrer ce qui est prt aujourdhui par fonctionnalit !

    Marathon

  • @BeastieFurets#LesFuretsContinuous

    Time To Market 2012 : Dbut dev la MEP : Temps dev + 2 semaines

    Non satisfaisant pour le business

    2014 : Dbut dev la MEP : Temps dev + 2 jours

    Quand cest prt

  • @BeastieFurets#LesFuretsContinuous

    Vue du mtier : 2012 Mindset Itration : Focalis sur la date de livraison de lensemble

    Tendance naturelle charger

    Mauvaises Surprises : Pas dans la release = Au min 1 itration dattente

    Demande de livraisons spares (pour voir limpact !)

  • @BeastieFurets#LesFuretsContinuous

    Mindset Quand cest prt : Petit = vite

    Tendance naturelle allger

    Bonnes Surprises : Demande de livraisons spares (pour voir limpact !)

    MVP devient naturel pour dcider des gros projets

    Pas dans la release = au min +1 jour

    Vue du mtier : 2014+

  • Livraison Continue Jours / Heures

  • Points de repre

  • @BeastieFurets#LesFuretsContinuous

    Manifeste agilePrincipe #1

    Notre plus haute priorit est de satisfaire le client en livrant rapidement et rgulirement

    des fonctionnalits grande valeur ajoute.

    http://agilemanifesto.org/iso/fr/principles.html

    http://agilemanifesto.org/iso/fr/principles.html

  • @BeastieFurets#LesFuretsContinuous

    Livrer tt, livrer souvent

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

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

  • @BeastieFurets#LesFuretsContinuous

    Continuous Delivery

    1. Build rapide

    2. Build robuste

    3. Dploiements simples et automatiss

    4. Monitoring de production et alertes

    5. Analyse des causes racines

  • @BeastieFurets#LesFuretsContinuous

    Git / Git Flow / Github FlowGit: Un puissant modle de branches

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

    Master

    Branch

    Pull Request

    Github

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

  • Points cls : de la conception lexploitation

  • @BeastieFurets#LesFuretsContinuous

    Amliorer par la fin5. Monitoring & Exploitation

    4. Mise En Production

    3. Release Cration & Validation

    2. Dveloppement

    1. Conception

  • 1. Conception

  • @BeastieFurets#LesFuretsContinuous

    Flux de fonctionnalits #1 Fonctionnalits conues pour tre indpendantes

    Livrable ds que cest prt Dcouplage des fonctionnalits Si dpendant alors attendre ou fusionner

    #2 Fast feedback Petites taches vites en production Retour chiffr rapide pour prise de dcision : stop / cont.

  • OrganisationPr

    iorit

    isat

    ion

    Resource Allocation

    Team Team Team

    Strategic program initiatives

    5% RUN

    35% BAU / QUAL

    60% BUILD

  • @BeastieFurets#LesFuretsContinuous

    Flow from Portfolio

    29

  • 2. Dveloppement

  • @BeastieFurets#LesFuretsContinuous

    Environnement Dev Chaque fonctionnalit sur une branche feature ddie

    Code Production (master) + fonctionnalit uniquement

    Isolation sur le poste de chaque dveloppeur (+ alias DNS)

    Environnements quasi iso Production

    Capacit de se focaliser sur ce dveloppement

  • @BeastieFurets#LesFuretsContinuous

    Intgration ContinueFeature Branching + Intgration Continue

  • @BeastieFurets#LesFuretsContinuous

    Intgration ContinueLintgration continue effectue chaque commit :

    Compilation Tests automatiss Merge des features branches (Octopus)

    On fait du continuous merge avec lOctopus

  • @BeastieFurets#LesFuretsContinuous

    Continuous Merge Octopus Outil Open Source de merge en continu

    Dvelopp en interne chez LesFurets.com : https://github.com/lesfurets/git-octopus

    Il existe une confrence ddie par Arnaud Pflieger

    https://github.com/lesfurets/git-octopus

  • @BeastieFurets#LesFuretsContinuous

    Continuous Merge Octopus

  • @BeastieFurets#LesFuretsContinuous

    Environnement Stage Quasi iso environnement de Production

    Regroupement de toutes les features en cours (Octopus)

    Effets de bord des features

    Seleniums sur le regroupement

    Suivi des logs plus facile

  • 3. Release Cration & Validation

  • @BeastieFurets#LesFuretsContinuous

    Cration Release BrancheCration entirement automatise :

    Regroupement des features prtes (Octopus)

    Dploiement sur Pre-Prod (quasi iso Prod)

    Validation sur Pre-Prod

  • @BeastieFurets#LesFuretsContinuous

    Validation Release BrancheValidation laide doutils manuels et automatiques :

    Tests unites et dintgration Code review Validation fonctionnelle (sur env Stage) Grid Selenium Non rgression UI (Zeno)

  • @BeastieFurets#LesFuretsContinuous

    Grid Selenium on LXC 200 Tests Selenium : 6 heures

    Grid Selenium classique : 1heure

    Grid Selenium RamFS : 10 minutes

    1 Machine OVH, 128 Go RAM, 300 euros/mois

    Dtails sur https://github.com/lesfurets/selenium-lxc

    https://github.com/lesfurets/selenium-lxc

  • @BeastieFurets#LesFuretsContinuous

    Zeno Pixel Outil Open Source de comparaison dimages (perceptual diff)

    Dvelopp en interne chez LesFurets.com : https://github.com/lesfurets/zeno-pixel

    Il existe une confrence ddie par Matthieu Fourtina

    https://github.com/lesfurets/zeno-pixel

  • @BeastieFurets#LesFuretsContinuous

    Zeno Pixel Screenshots automatiques des pages du site

    Cross-environment (Stage, Pre-Prod, Prod)

    Cross-device (Desktop, Mobile, Tablet)

    Comparaisons des versions de chaque page

    Calcul des diffrences graphiques

  • @BeastieFurets#LesFuretsContinuous

    Zeno Pixel

  • 4. Mise En Production

  • @BeastieFurets#LesFuretsContinuous

    Mise En Production Ralise de A Z par un seul dveloppeur

    Automatise via Jenkins : Cration de la Release Branche

    Dploiement de Release Branche

    Merge de la Release Branche dans le master

    Cration et diffusion de la Release Note

  • @BeastieFurets#LesFuretsContinuous

    Infrastructure As Code

    Toutes les modifications de configuration sont historisesLes bugs de configuration sont des bugs de code

  • @BeastieFurets#LesFuretsContinuous

    DploiementTout le dploiement est fait avec 0 downtime en utilisant un

    systme Blue / Green

  • @BeastieFurets#LesFuretsContinuous

    Git Flow Rsum

    48

  • 5. Monitoring & Exploitation

  • @BeastieFurets#LesFuretsContinuous

    Monitoring techniqueSondes Datadog - Indicateurs techniques

  • @BeastieFurets#LesFuretsContinuous

    Monitoring fonctionnelSondes Zabbix - Indicateurs fonctionnels

  • @BeastieFurets#LesFuretsContinuous

    Alertes & LogsChaque logs/traces d'erreurs arrivent par mail

    depuis de chaque environnement :

    200-1000 erreurs / jour, dont 20% depuis le JS

    1h synthtise = 1 mail

    24h synthtises = 1 mail

  • @BeastieFurets#LesFuretsContinuous

    Post Mortem Work in progress

    Post Mortem sur chaque incident de Production

    Analyse de la cause profonde

    Suivi de rsolution de la cause

    Actuellement 5-10 incidents mineurs par mois, ~1 major

  • Git Octopus en dtails

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Le Continuous Merge

    Merge automatique !

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master

    features/f1

    features/f2

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master

    features/f1

    features/f2

    merged-features

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    nexiste pas !git merge features/*

    git octopusgithub.com/lesfurets/git-octopus

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Git Octopus

    How it works ?

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master

    features/f1

    features/f2

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master

    features/f1

    features/f2

    octopus

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Git Octopus

    What about conflicts ?

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    x

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    merge-master

    features/new

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    merge-f1

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    merge-f2 x

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Git Octopus

    Avoid conflicts !

    #1

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    #1

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new*

    #1

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new*

    #1

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Git Octopus

    Remove Branch

    #2

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    x

    #2

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 studies/new

    #2

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    studies/new

    #2

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Git Octopus

    Merge Branch

    #3

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    x

    #3

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    feature/f2_new

    #3

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1

    feature/f2_new

    #3

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1

    feature/f2_newoctopus

    #3

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Git Octopus

    Rebase branches

    #4

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    x

    #4

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    #4

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    #4

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Git Octopus

    git conflict

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    x

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2

    octopus

    features/new

    xconflict/resolutions

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    merge-f2conflict/resolutions

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    conflict/resolutions ?merge-f2 x

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    conflict/f2_new

    conflict/resolutions

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    conflict/f2_new

    conflict/resolutions

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    merge-f2conflict/resolutions

    #5

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    merge-f2conflict/resolutions

    #5

    ?

    http://github.com/lesfurets/git-octopus

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    master features/f1 features/f2 features/new

    octopusconflict/resolutions

    #5

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Safe Zone:

    Eviter le conflit (!) Git conflict

    Danger Zone:

    Merge des branches (attention) Sortir de lIC (le temps que a sorte) Rebase lune sur lautre

    Lors des conflits

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Demo

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Workflow chez LF.com

    http://github.com/lesfurets/git-octopushttp://lf.com

  • @beastiefuretsgithub.com/lesfurets/git-octopus

    ticket1

    ticket2

    ticket3

    ticket4

    ticket5

    features releaseslocal

    ticket3

    master

    ticket3

    ticket1

    master

    octopus-features

    octopus-releases

    Le temps de commiter 1 jour 1 mois 1 - 2 jours

    pull requests

    0 - 2 jours

    release

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Bonnes pratiques

    Proximit des quipesDveloppements indpendantsBonne maitrise de GitCode sainMEPs frquentes

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Commencez chez Vous

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Utilisation locale

    brew install git-octopus (or from sources)Si vos branches ont un nommage features/xxxOn merge uniquement les branches remote

    entre elles

    git octopus -n origin/features/* origin/master

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Peut-on mieux faire ?

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    La suite

    Feature: Merge Github Pull-requestsBetter documentation (please contribute)LesFurets : Tendre vers 1 Mep / branche

    http://github.com/lesfurets/git-octopus

  • @YourTwitterHandle@[email protected]/lesfurets/git-octopus

    Just Do ItTu releases ton soft au moins une fois par mois ?

    Le continuous delivery nest pas loin !

    Dans lintgration continue (CI & QA)Un peu plus de devopsGitProcess de validation incrmentale

    http://github.com/lesfurets/git-octopus

  • Quelques Inspirations

  • @BeastieFurets#LesFuretsContinuous

    How Google Test Software Quality Engineering plutt que

    Quality Assurance

    Cration doutils de test pour les devs

    Les devs font la QA eux mme

  • @BeastieFurets#LesFuretsContinuous

    Kanban : Evolutionary Change Visualisation du travail

    Limiter le travail en cours (WIP)

    Rgles explicites

    Amlioration continue

    Leadership

  • @BeastieFurets#LesFuretsContinuous

    Product Development Flow Travailler en flux

    Grer les files dattentes

    Regarder le lead time plutt que le cot de dveloppement

    Rduire le cot de livraison

  • @BeastieFurets#LesFuretsContinuous

    How to measure anything Li une dcision prendre

    Poser le problme

    Beaucoup plus simple quon pense

    112

  • @BeastieFurets#LesFuretsContinuous

    The Phoenix project How to avoid experts as SPOF

    DevOps as Business enabler

    Small and motivated teams

    Resilience !

    113

  • Merci !