Qu'est-ce que l'intégration continue (CI) ?

Pour clarifier le terme « CI », il est intéressant de noter que « CI » est l'abréviation anglaise usuelle pour « intégration continue ». La définition CI est la suivante : toutes les personnes travaillant sur le même projet fusionnent régulièrement les modifications qu'elles apportent à la base de code dans un référentiel central. Les projets impliquant généralement plusieurs développeurs, il est donc important de centraliser les éléments de travail. Idéalement, ce processus doit être automatisé et exécuté plusieurs fois par jour. L'intégration continue a pour objectif de maintenir une approche fiable de la création et de la publication de logiciels en favorisant la collaboration, l'automatisation et des cycles de rétroaction courts.

La pratique de l'intégration continue commence par la soumission régulière des modifications à un système de contrôle de code source/version, afin que tout le monde puisse travailler à partir de la même base. Chaque commit déclenche un build et une série de tests automatisés pour vérifier le comportement et s'assurer que la modification n'a rien cassé. Bien que l'intégration continue soit bénéfique en soi, c'est aussi la première étape vers l'implémentation d'un pipeline de CI/CD.

En adoptant une définition claire du processus CI et en implémentant cette pratique dans leur processus de développement, les équipes peuvent optimiser leur workflow et améliorer la qualité de leur logiciel.

intégration continue

Pratiques de CI

Les ingrédients clés de l'intégration continue sont les suivants :

  • un système de contrôle des sources ou des versions contenant l'ensemble de la base de code, y compris les fichiers de code source, les bibliothèques, les fichiers de configuration et les scripts
  • des scripts de build automatisés
  • des tests automatisés
  • une infrastructure sur laquelle il est possible d'exécuter des builds et des tests.

Pour que tout le monde puisse bâtir sur les mêmes fondations, vous devez travailler à partir du même référentiel et partager fréquemment vos modifications avec les autres. Une bonne règle à suivre est de demander à chacun de commit ses modifications sur le master/trunk au moins une fois par jour.

Après avoir effectué un commit d'une modification, l'étape suivante consiste à construire la solution et à la soumettre à une série de tests automatisés pour vérifier le comportement. L'automatisation de ce processus fait partie intégrante de l'intégration continue car la construction et/ou les tests manuels prennent du temps et sont sources d'erreurs, ce qui rend l'objectif d'intégrer quotidiennement les modifications irréalisable. Les outils de build et les frameworks de test que vous utilisez dépendent du langage dans lequel vous travaillez.

Une fois les scripts et les tests mis en place, le processus doit être maintenu. Cela implique l'ajout de tests automatisés pour toute nouvelle fonctionnalité, le traitement des échecs et le suivi des performances du processus.

L'ajout d'un serveur de CI pour s'occuper du contrôle de votre référentiel, du déclenchement des builds, de l'exécution des tests automatisés et de la collecte des résultats contribue à rassembler tous ces éléments, ce qui vous fait gagner du temps lors de l'écriture d'une logique d'automatisation personnalisée, et fournit des informations supplémentaires telles que les indicateurs de couverture du code et l'historique des builds.

Ces outils et processus sont certes importants pour l'implémentation de l'intégration continue, mais pour en tirer le meilleur parti, il faut que les gens adhèrent à cette pratique. En tant qu'équipe de développement, vous devez adapter vos processus afin d'intégrer des commits au master à intervalles réguliers, d'ajouter des tests automatisés à toute nouvelle fonctionnalité et de donner la priorité à la réparation du build si quelque chose ne va pas. Travailler avec l'équipe d'assurance qualité pour établir les priorités, concevoir et maintenir des tests automatisés et collaborer avec le personnel de l'infrastructure afin de fournir des machines sur lesquelles exécuter les builds et les tests contribueront à éliminer les silos organisationnels.

Les défis de l'intégration continue

Bien que l'intégration continue présente des avantages non seulement pour les développeurs mais aussi pour l'organisation dans son ensemble, cela ne signifie pas qu'elle soit toujours accueillie à bras ouverts.

Pour de nombreuses équipes de développement, le DevOps représente un grand changement dans leur façon de travailler et remet en question les processus existants. Une bonne communication est nécessaire pour coordonner le travail des équipes et instaurer une culture axée sur la collaboration.

Si vous suivez déjà des méthodologies agiles, le changement est généralement un peu plus facile, car l'importance accordée aux retours d'information pour s'assurer de construire le bon produit et la notion d'équipes auto-organisées devraient déjà s'être imposées.

Si ce n'est pas le cas, reconnaître qu'il s'agit d'un changement important, établir un dialogue, commencer doucement et démontrer les avantages au fur et à mesure sont autant de moyens de rallier vos collègues.

L'intégration continue se heurte également à des défis plus pratiques. Si vous travaillez sur une grande application monolithique, les temps de build peuvent être lents et si les environnements de test sont peu nombreux, il peut être difficile de paralléliser les tests.

En ayant une bonne visibilité de votre workflow d'intégration continue et en utilisant des indicateurs pour identifier les goulets d'étranglement, vous pouvez quantifier les coûts et les avantages liés à l'investissement dans des changements d'architecture, dans des infrastructures supplémentaires et dans la couverture de tests automatisés.

Avantages de la CI

Grâce à l'intégration continue, les équipes peuvent accélérer le cycle de publication de leurs logiciels sans en compromettre la qualité. L'objectif principal de l'intégration continue est d'atténuer les risques lors du déploiement et de raccourcir la boucle de rétroaction.

Voici quelques-uns des principaux avantages de l'intégration continue :

  • Déploiements à faible risque. En fusionnant le code en continu au fur et à mesure de son écriture, vous pouvez corriger rapidement les erreurs.
  • Meilleure qualité. L'automatisation d'une grande partie des tâches manuelles permet aux développeurs de se concentrer sur des activités de test de plus haut niveau.
  • Réduction des coûts. En implémentant l'intégration continue, en livrant des lots plus petits et en automatisant une grande partie de leur travail, les entreprises peuvent radicalement réduire les coûts de la livraison de logiciels.

Bonnes pratiques CI/CD

L'intégration, la livraison et le déploiement continus permettent aux entreprises de réduire les coûts et de raccourcir considérablement le cycle de livraison des logiciels. Bien pensés, ils sont indispensables à l'efficacité du processus de build, de test et de publication des logiciels. Voici quelques-unes des meilleures pratiques de CI/CD :

  • Des commits précoces et fréquents. La livraison plus fréquente de mises à jour de plus petite taille vous permet de recevoir des retours d'expérience sur chaque modification et d'en assurer le suivi. Selon le rapport sur l'état du DevOps, les équipes les plus performantes comptent environ 417 fois plus de déploiements que les moins performantes.
  • Préservez la fraîcheur de vos builds. L'implémentation de tests automatisés qui s'exécutent à chaque commit d'un nouveau code permet à un pipeline de CI/CD de fournir aux développeurs un retour d'informations rapide sur leurs modifications.
  • Faites-en un passage obligatoire pour déployer en production. Lorsque votre équipe doit publier un logiciel rapidement, il peut être tentant de sauter quelques étapes d'un processus CI/CD bien établi. Respecter cette routine peut toutefois vous aider à éviter d'insérer des problèmes dans votre base de code.

Outils de CI/CD

Il est impossible de créer un pipeline de CI/CD stable et fiable sans les outils de CI/CD appropriés. Ils vous aident à coordonner les différentes parties du pipeline, du lancement de l'intégration au déploiement du code en production, en passant par le déclenchement des tests automatisés. Que votre équipe utilise un outil de CI/CD intégré qui prend en charge toutes les étapes du processus de CI/CD, comme TeamCity, ou qu'elle opte pour différents outils en fonction de ses objectifs, les logiciels que vous choisissez doivent prendre en charge l'ensemble de la pile technologique avec laquelle votre équipe travaille. Ils doivent également pouvoir s'intégrer au reste des logiciels que vous utilisez dans le cadre de votre travail et vous autoriser suffisamment de personnalisation et de souplesse pour s'adapter au niveau de complexité de votre workflow, quel qu'il soit.

Différences entre CI et CD

Plutôt que de comparer les avantages de la CI à ceux de la CD, il est plus utile de comprendre comment ces différentes parties du processus de développement se complètent pour vous aider à fournir un logiciel sans erreurs aux utilisateurs finaux.

L'intégration continue est le processus qui consiste à fusionner les modifications du code dans une branche principale. La livraison continue s'appuie sur les fondations posées par l'automatisation des tests et des builds mise en place lors de l'étape d'intégration continue. Le déploiement continu est l'étape finale du processus de CI/CD, au cours de laquelle la nouvelle version du logiciel est livrée aux utilisateurs finaux une fois que toutes les exigences ont été satisfaites.

Plus d'informations sur les différences entre CI et CD

Conclusion

L'adoption de l'intégration continue permet d'accélérer le processus de développement tout en améliorant la qualité du code. L'automatisation de ces étapes vous permet de travailler plus efficacement et de vous concentrer sur la valeur ajoutée pour vos utilisateurs. Mais l'intégration continue n'est que le début du pipeline de CI/CD. L'étape suivante, la livraison continue, applique les principes DevOps à la partie suivante du processus de publication.