Outils d'intégration continue

Max Rehkopf Max Rehkopf

Résumé : l'intégration continue (CI) est une bonne pratique Agile et DevOps qui permet à plusieurs développeurs de contribuer et de collaborer rapidement dans une base de code partagée. Sans elle, la collaboration des développeurs est un processus manuel fastidieux de coordination des mises à jour et des merges de code.

Les piliers de l'intégration continue

La CI s'appuie sur les bonnes pratiques de développement logiciel Agile et DevOps, notamment les tests automatisés, le contrôle de version, l'automatisation des builds et les déploiements automatisés. Chacun de ces piliers de la CI dispose de son propre écosystème d'outils et de philosophies. Les fournisseurs d'outils de développement logiciel ont commencé à proposer des offres complètes de CI en tant que service, qui regroupent ces piliers en un seul package complet. Pour mieux comprendre les offres groupées, passons en revue les fondements.

Gestion du contrôle de version

Probablement le pilier le plus important de l'intégration continue, la gestion du contrôle de version est utilisée pour signaler et résoudre les conflits d'édition entre plusieurs développeurs travaillant dans la même base de code. Elle est disponible dans différents outils, les plus populaires étant Git et Subversion. Les produits de CI en tant que service sont axés sur le système de contrôle de version.

Tests automatisés

La plupart des projets logiciels sérieux incluent une base de code supplémentaire qui n'est pas explicitement responsable du produit et des fonctionnalités métier. Cette base de code secondaire constitue une suite de tests et agit comme un ensemble d'assertions qui garantit que la base de code principale fonctionne correctement, sans bugs. Au cours du développement, ces tests sont exécutés par les développeurs pour vérifier si le nouveau code n'a pas provoqué de régression sur les fonctionnalités existantes. Ces cas de test peuvent également être exécutés par des outils externes pour automatiser ce processus de validation. Les produits de service de CI exécuteront automatiquement les cas de test d'un projet sur les événements spécifiés par l'utilisateur. Généralement, lorsqu'un développeur pushe du code à l'aide du système de contrôle de version, un événement déclenche l'exécution automatique de la suite de tests complète.

Automatisation des builds

Les « builds » sont les artefacts générés pour créer un instantané de la version actuelle d'un projet logiciel. Ils sont distribués aux utilisateurs finaux via divers réseaux. Un projet suit généralement un ensemble d'étapes scriptées pour créer un artefact de build. Les outils de CI aident à simplifier ce processus de build grâce à des déclencheurs automatiques à partir du système de contrôle de version. Nous parlerions par exemple de déclencheur lorsque le nouveau code est mergé dans la branche de production de la base de code et que le build est importé sur un serveur distant pour permettre aux utilisateurs de le télécharger.

Déploiements automatisés

Lorsque les builds sont prêts à être distribués, ils passent par un processus de déploiement. Selon le projet, le déploiement peut donner différents résultats. Par exemple, les projets web sont déployés sur des serveurs web publics. Au cours de ce déploiement, l'artefact généré dans la phase de build est copié sur les serveurs web. Le processus pour les appareils mobiles et les ordinateurs de bureau varie et peut impliquer l'importation dans un « magasin » pour permettre aux utilisateurs de télécharger l'app.

Comparaison des outils d'intégration continue

Bitbucket Pipelines

Résumé : Bitbucket Pipelines est un outil de CI directement intégré à Bitbucket, un système de contrôle de version cloud fourni par Atlassian. Bitbucket Pipelines constitue une étape simple pour activer la CI si votre projet se trouve déjà sur Bitbucket. Les pipelines Bitbucket sont gérés comme du code afin de vous permettre de commiter facilement les définitions de pipeline et de lancer des builds. Bitbucket Pipelines propose également la CD. Les projets développés avec Bitbucket Pipelines peuvent également être déployés dans l'infrastructure de production.

Fonctionnalités :

  • Installez et configurez la solution en toute facilité
  • Expérience Bitbucket unifiée
  • Cloud tiers

Site web : https://bitbucket.org/product/features/pipelines

Jenkins

Résumé : Jenkins est un outil de CI de longue date ayant fait ses preuves. Open source, il repose sur des mises à jour de la communauté. Jenkins est principalement destiné à une installation sur site. Il constitue une excellente option lorsque votre organisation a besoin d'un support sur site pour gérer des clients sensibles (p. ex., les données de conformité HIPAA).

Fonctionnalités :

  • Sur site
  • Open Source
  • Écosystème robuste d'extensions et de plug-ins

Site web : https://jenkins.io/

AWS CodePipeline

Résumé : Amazon Web Services est l'un des fournisseurs d'infrastructure cloud leaders du marché. Il propose des outils et des services pour toutes sortes de tâches de développement de code et d'infrastructure. Son outil de CI est CodePipeline. Ce dernier peut interagir directement avec d'autres outils AWS existants pour offrir une expérience AWS transparente.

Fonctionnalités :

  • Entièrement dans le cloud
  • Intégré à Amazon Web Services
  • Prise en charge de plug-ins personnalisés
  • Contrôle d'accès robuste

Site web : https://aws.amazon.com/fr/codepipeline/

CircleCI

Résumé : CircleCI est un outil de CI qui s'associe parfaitement avec Github, l'un des outils d'hébergement cloud de VCS les plus populaires. CircleCI est l'un des outils de CI les plus flexibles, en ce sens qu'il prend en charge une matrice de VCS, de systèmes de conteneurs et de mécanismes de livraison. CircleCI peut être hébergé sur site ou utilisé par le biais d'une offre cloud.

Fonctionnalités :

  • Déclencheurs de notification à partir d'événements de CI
  • Performances optimisées pour des builds rapides
  • Débogage facile via SSH et des builds locaux
  • Analyses pour mesurer les performances de build

Site web : https://circleci.com/

Azure Pipelines

Résumé : Azure est la plateforme d'infrastructure cloud de Microsoft (l'équivalent d'Amazon Web Services). Comme AWS CodePipeline mentionné plus haut, Azure propose un outil de CI entièrement intégré à la suite Azure d'outils d'hébergement.

Fonctionnalités :

  • Intégration de la plateforme Azure
  • Prise en charge de la plateforme Windows
  • Prise en charge des conteneurs
  • Intégration GitHub

Site web : https://azure.microsoft.com/fr-fr/

GitLab

Résumé : Gitlab est un nouvel outil de CI qui offre une expérience DevOps complète. Il a été créé dans le but d'améliorer l'expérience globale de Github. Gitlab propose une expérience utilisateur moderne et une prise en charge des conteneurs.

Fonctionnalités :

  • Hébergement sur site ou dans le cloud
  • Tests de sécurité continus
  • Expérience utilisateur simplifiée

Site web : https://about.gitlab.com

Atlassian Bamboo

Résumé : une autre offre de CI d'Atlassian. Alors que Bitbucket Pipelines est une simple option hébergée dans le cloud, Bamboo offre une alternative auto-hébergée.

Fonctionnalités :

  • Meilleure intégration avec la suite de produits Atlassian
  • Vaste Marketplace d'extensions et de plug-ins
  • Prise en charge des conteneurs avec les agents Docker
  • API de déclenchement pour la fonctionnalité IFTTT

Site web : https://www.atlassian.com/fr/software/bamboo

Quel est le meilleur outil de CI pour votre entreprise ?

Lorsque vous sélectionnez l'outil de CI pour votre équipe, il faut tenir compte de quelques facteurs décisionnels importants.

Prise en charge de système de contrôle de version

La prise en charge et l'intégration du système de contrôle de version (VCS) sous-jacent constituent le principal pilier d'un système de CI/CD. Git, Subversion, Mercurial et Perforce sont les VCS les plus populaires. Les outils de CI cloud peuvent garantir la prise en charge de certains ou de l'ensemble des VCS. Vous devez impérativement choisir un outil de CI qui prend en charge tous les VCS de vos projets.

Sur site et dans le cloud

Certains des outils de CI mentionnés ci-dessus (p. ex., Jenkins) peuvent être installés sur site. Votre équipe est alors responsable de la configuration et de la gestion du système de CI sur votre propre infrastructure. Cette approche est avantageuse en termes de confidentialité et de sécurité. Par exemple, en cas de préoccupations relatives à la confidentialité des données client en vue de répondre aux normes de conformité, une installation sur site peut s'avérer nécessaire. En outre, les instances sur site fournissent parfois des options de personnalisation et de configuration plus avancées.

Les installations sur site peuvent entraîner un surcroît de travail qui ne correspond pas aux besoins métier fondamentaux. Les options cloud externalisent la gestion de l'outil de CI à un fournisseur tiers. L'entreprise d'hébergement cloud gère ensuite la disponibilité, le support et l'évolutivité de l'outil de CI, permettant ainsi à votre équipe de se consacrer aux besoins métier fondamentaux. Cette approche peut constituer un énorme avantage pour les équipes ayant un budget serré ou les petites entreprises qui doivent impérativement se concentrer sur les objectifs d'adaptation d'un produit au marché.

Prise en charge des conteneurs

La conteneurisation est une tendance du développement logiciel moderne. Elle permet la distribution d'une copie immuable, reproductible et isolée d'une app. Elle est possible grâce à des outils tels que Docker et Kubernetes. Les outils de CI modernes offriront un support pour l'intégration des conteneurs dans le processus de CI/CD. Les conteneurs résolvent les problèmes de type « Ça fonctionne sur ma machine ». Ils s'assurent que le code applicatif est fourni dans un instantané figé des dépendances au niveau du système. Lorsque le code de votre équipe est exécuté sur l'outil de CI, il s'agit donc d'une réplique de l'environnement local. Une catégorie entière de tickets de dépannage de parité d'environnement qui se posent sans conteneurs est alors éliminée.

Plug-ins et intégrations tierces

Les outils de CI sont d'autant plus utiles lorsqu'ils sont intégrés au reste de votre stack technique. Des analyses sur l'efficacité et les performances de l'équipe d'ingénierie peuvent être collectées à partir des outils de CI. Les apps de planification de sprint peuvent être associées aux outils de CI pour mettre à jour automatiquement l'état du sprint une fois le code livré. Ces intégrations peuvent être utilisées pour orienter les KPI et les feuilles de route de l'équipe d'ingénierie.

Lancez-vous avec la CI

Un outil de CI moderne constitue une exigence essentielle pour toute équipe d'ingénierie ultra performante. Les équipes d'ingénierie peuvent optimiser la vitesse de leurs communications et de leurs livraisons à l'aide d'un outil de CI. De nombreux outils de CI populaires sont disponibles sur le marché. Les concepts de base à prendre en compte lors du choix d'un outil de CI sont la prise en charge du VCS, l'hébergement sur site et dans le cloud, les pipelines de déploiement et les intégrations d'apps externes.