Intégrez tôt, intégrez souvent. Construisez une base de code partagée en toute confiance.
L'intégration continue est largement mal comprise. Ce n'est pas juste un serveur de build. Ce n'est pas juste exécuter des tests à chaque commit. Ce sont des outils qui soutiennent l'IC — mais l'IC elle-même est une pratique.
La vraie IC signifie :
La partie « continue » est essentielle. Si vous intégrez chaque semaine, ce n'est pas continu. Si vous avez des branches de fonctionnalité de longue durée, ce n'est pas continu. L'IC signifie intégrer votre travail avec celui de tous les autres chaque jour, généralement plusieurs fois par jour.
L'IC est une pratique sociale
L'IC concerne la façon dont l'équipe travaille ensemble, pas seulement l'outillage. Un serveur Jenkins qui exécute des tests sur des branches vieilles d'un mois n'est pas de l'IC.
La vraie IC nécessite le développement basé sur le trunk : tout le monde commite sur la branche principale (souvent appelée « trunk » ou « main »).
Ça semble effrayant. Les gens ne vont-ils pas tout casser ? C'est là que la discipline entre en jeu :
Les branches de longue durée sont l'ennemi de l'IC. Quand vous développez sur une branche pendant des semaines, vous n'intégrez pas. Vous ne faites que reporter l'intégration — et plus vous attendez, plus ça devient difficile.
Branchez pour des heures, pas des jours. Intégrez quotidiennement, pas chaque semaine.
Un développeur crée une branche, travaille pendant 2-3 heures, exécute tous les tests localement, puis fusionne vers main. Cela se produit 3-4 fois par jour par développeur. L'intégration est ennuyeuse parce que les conflits sont rares et petits.
Les développeurs créent des branches de fonctionnalité qui vivent pendant 2-3 semaines. Ils fusionnent vers main quand la fonctionnalité est « terminée ». Les conflits de fusion sont pénibles. Les bogues d'intégration sont courants. Le « serveur d'IC » ne teste que la branche main obsolète.
Pour que l'IC fonctionne, le cycle de build et de tests doit être rapide. Martin Fowler suggère la règle des 10 minutes : le build complet, incluant tous les tests, devrait se terminer en moins de 10 minutes.
Pourquoi 10 minutes ? Parce que :
Si votre build prend trop de temps :
Certaines équipes exécutent un sous-ensemble rapide localement (tests unitaires) et la suite complète sur le serveur d'IC. C'est correct tant que la suite complète s'exécute assez rapidement pour fournir un retour en temps opportun.
Le build va échouer. Ce qui compte, c'est ce qui se passe ensuite.
La règle : Quand le build échoue, le corriger devient la priorité absolue. Tout le reste s'arrête.
Cela peut sembler extrême, mais considérez : un build cassé signifie que l'équipe ne peut pas faire confiance à la branche principale. Le travail de tout le monde est bloqué parce qu'ils ne peuvent pas intégrer en toute sécurité. Chaque minute où le build est cassé est une minute de risque accumulé.
Qui le corrige ? Généralement la personne qui l'a cassé. Mais si elle est bloquée, d'autres aident. Un build cassé est un problème d'équipe, pas un problème individuel.
Comment prévenir les échecs :
Certaines équipes utilisent une rotation de « shérif d'IC » — quelqu'un responsable de surveiller le build et de coordonner les corrections. Cela prévient l'effet du spectateur où tout le monde suppose que quelqu'un d'autre va le corriger.
Les builds cassés sont des urgences
Un build cassé qui reste cassé pendant des heures est un échec d'équipe. Traitez-le avec la même urgence qu'un incident de production.
L'IC est la fondation pour des pratiques plus avancées :
Livraison continue (CD) : Chaque commit peut être déployé en production. Le déploiement est une décision d'affaires, pas technique.
Déploiement continu : Chaque commit qui passe les tests est automatiquement déployé en production. Aucune approbation humaine requise.
Toutes les équipes n'ont pas besoin de déploiement continu. Mais toutes les équipes bénéficient de l'IC. Commencez par là.
Métriques d'IC à surveiller :
L'IC ne concerne pas seulement la détection de bogues. Il s'agit de créer un rythme où l'intégration est ennuyeuse, routinière et sûre. Quand l'intégration est sûre, tout le reste devient plus facile.