Continuous delivery
chez LesFurets.com

Alexandre DuBreuil

Alexandre DuBreuil

Tech lead équipe panel assureur

Notre équipe est constitué de 21 développeurs dont 2 ops.

Les développeurs ont des responsabilités devops, telles que la livraison en production, la gestion de la configuration des environnements, le monitoring, etc.

Le delivery chez LesFurets.com

"On cherche à courir un marathon
pas un sprint"

Notre évolution du delivery en transformation vers du continuous delivery

  • 2012 : 12 releases en sprint scrum mensuel (build 15 minutes et selenium 1 heure)
  • 2013 : 45 releases en sprint scrum hebdo (build 3 minutes, release 1 jour)
  • 2014 : 200+ releases en kanban daily delivery (release 2 heures)
  • 2016 : 300+ releases en kanban one feature release (one click release)

On a besoin de certains éléments préalables

Un code correctement segmenté (avec des parties indépendantes), une bonne couverture de test, des features indépendantes (donc des branches indépendantes) et une chaine de build rapide et automatique (y compris le déploiement).

Normalement, nos 200 tests selenium prendraient 6 heures. Avec un grid selenium classique, on arrive à 1 heure

Avec un grid selenium en RAMFS ? 10 minutes

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

En plus du monitoring technique et métier, on a besoin d'un monitoring UI, LesFurets Zeno pixel :
https://github.com/lesfurets/zeno-pixel

Déploiement blue / green, 0 downtime, avec HAProxy

Source code management

Trunk based : tout le code est dans le master, nécessite du feature toogle

Feature branching : branches individuelles, difficile de faire de l'intégration continue et de gérer les conflits

Github flow : feature branche avec code review

Feature branching + continuous merge

Continuous merge

Le merge de plusieurs branches avec git :


git merge features/*
        

...n'existe pas, donc on l'a créé

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

Mais que se passe-t'il lorsqu'il y a des conflits ?

features/new ne fusionne pas avec features/f2

Lors de conflit, on a plusieurs solutions de différentes natures :

On peut enlever la branche (le plus simple), on peut éviter le conflit (souvent la solution préférée), on peut utiliser git-conflict (livré avec git-octopus) ou on peut fusionner / rebaser les branches en conflit (danger zone).

git-conflict (livré avec git-octopus)
est un gestionnaire de conflit reproductible distribué (cool !)

Les déploiements se font vers plusieurs environnements : personnel (la feature courtante), docker (une feature en isolé, disponible de l'extérieur), developpement (toutes les features), staging / dog fooding (validation fonctionnelle), pre-production (release de demain) et production.

On utilise l'octopus pour l'environnement de staging (octopus-features) et pour l'environnement de preprod (octopus-releases).

En résumé : le continuous delivery est atteignable pour une équipe de toute taille.

Il faut y arriver pas à pas, en commençant par le continuous merge, qu'on peut mettre en place immédiatement sans impact !

Ajoutez git-octopus à votre CI dès maintenant...

FIN