If you can't read please download the document
Upload
beastiefurets
View
547
Download
2
Embed Size (px)
Citation preview
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 !