Une histoire de transformation vers le continuous delivery
Chez LesFurets.com, le continuous delivery est un process
Une partie importante de ce process est le continuous merge : il nous permet de travailler en feature branching
feature branching : on part d'un master
feature branching : création d'une branche de développement features/f1
feature branching : création d'une branche de développement features/f2
Merge pre-build : merge de master sur la branche avant le build. Les outils IC permettent de faire le merge simple automatique.
Avec une code base en feature branching, chaque feature est sur une branche dédiée, la prochaine release est la fusion du master et des features, les développements avancent en isolation, et on livre une branche lorsqu'elle est prête.
On perd l'intégration continue et la gestion des conflits
On veut une code base en feature branching (pour sa flexibilité) et on veut faire du continuous delivery (pour sa valeur ajoutée), sans perdre l'intégration continue.
Autrement dit, comment réconcilier feature branching et intégration continue ?
On fait du continuous merge !
Feature branching : historiques indépendants de features/f1
et features/f2
Continuous merge : merge de features/f1
et features/f2
avec master
continuous merge : nouveau commit sur features/f1
continuous merge : fusion automatique
# Fusion plusieurs branches avec pattern
git merge features/*
Mais le merge de plusieurs branches à partir d'un pattern n'existe pas dans git...
LesFurets git-octopus :
https://github.com/lesfurets/git-octopus
✓ On garde l'intégration continue
✓ On livre ce qui est prêt grâce au feature branching
✓ Peu d'investissements pour mettre en place (git, jenkins, git-octopus)
✓ Facile de passer à l'echelle
✓ On constitue facilement les environnements dev avec toutes les features, stage pour la validation, preprod pour les tickets validés
Et comment gérer les conflits ?
gestion des conflits
gestion des conflits : une nouvelle branche sauvage
features/new
apparaît
gestion des conflits : git-octopus merge KO
gestion des conflits : git merge simple
master
et features/new
OK
gestion des conflits : git merge simple
features/f1
et features/new
OK
gestion des conflits : git merge simple
features/f2
et features/new
KO
On défini le risque d'une résolution de conflit lorsqu'on ajoute une dépendance entre deux branches
Une dépendance entre deux branches nous enlève la possibilité de livrer une branche dès qu'elle est prête
Avoir des conventions de code communes, éviter les binaires, avoir un code modulaire, évoluer par abstraction
RISQUE : faible
Si deux branches sont en conflits, on peut souvent en enlever une en attendant que l'autre soit dans le master
Règle générale, éviter les branches de longue durée
RISQUE : faible
On peut merger l'historique des deux branches pour résoudre le conflit : on perd alors la possibilité de livrer séparément
On peut aussi utiliser une branche partagée pour du code commun
RISQUE : danger
On garde alors une certaine flexibilité dans la livraison
Utile pour livrer des branches par étape, ou lorsqu'on sait qu'une branche partira avant une autre
RISQUE : danger
git-conflict
est livré avec git-octopus
et permet de persister la résolution de conflit à l'extérieur d'une branche
Permet l'évolution indépendantes des branches
Nécessite de valider le contenu des résolutions de conflit
RISQUE : attention
git-conflict : git-octopus features/* KO à cause de features/new
git-conflict : dépôt résolution de conflit situé sous conflict/resolutions
git-conflict : git merge simple features/f2
et features/new
KO
git-conflict : git-octopus regarde s'il y a une résolution de conflit disponible
git-conflict : git-octopus features/* OK
git octopus
peut être utilisé par n'importe quelle équipe pour valider le conflit entre les branches
git octopus
pour valider les conflits entre vos
pull requests
# Linux & Cygwin
git clone git@github.com:lesfurets/git-octopus.git
cd git-octopus && make install
# Mac
brew update
brew install git-octopus
Code source git octopus sur github
https://github.com/lesfurets/git-octopus
Forum git octopus sur Google Groups
https://groups.google.com/forum/#!forum/git-octopus
Blog technique sur git octopus
https://beastie.lesfurets.com/projets/
Ces slides
https://github.com/lesfurets/lesfurets-conferences