-
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 !