Qu’est-ce que l’intégration continue/la livraison continue (CI/CD) ?

Équipe de développeurs de logiciels discutant devant plusieurs écrans d’ordinateur

Intégration continue/livraison continue (CI/CD), définie

L’intégration continue/livraison continue (CI/CD) est un ensemble de pratiques qui automatisent et rationalisent les cycles de développement, de test et de livraison des logiciels.

La CI/CD offre aux entreprises un cadre de développement moderne qui permet des intégrations de code, des lancements de logiciels et des mises à jour plus rapides et plus fiables. Les approches CI/CD reposent sur un pipeline d’automatisation, appelé pipeline CI/CD, qui se compose de trois processus clés :

  • Intégration continue (CI) : la CI est une pratique de développement de logiciels dans laquelle les développeurs intègrent régulièrement du nouveau code dans un référentiel central de code source tout au long du cycle de développement.
  • Livraison continue (CD) : les pratiques de CD automatisent l’emballage et la livraison des modifications du code dès qu’elles passent les tests d’intégration. Elles conservent le code dans un état déployable et « permanent », afin que les développeurs puissent publier des packs de code à la demande.
  • Déploiement continu : les pipelines CI/CD matures reposent également sur un déploiement continu, une stratégie de développement qui permet aux développeurs de publier automatiquement des modifications de code dans l’environnement de production.

 

Pipeline CI/CD en boucle infinie

La CI/CD représente une modernisation importante des pratiques de développement de logiciels, qui nécessitaient auparavant des workflows manuels et des phases rigides et séquentielles. Les méthodes traditionnelles étaient adaptées aux petits projets de développement, aux projets dont les exigences étaient stables ou pour lesquels l’environnement réglementaire exigeait une certaine prévisibilité.

Aujourd’hui, les applications évoluent et changent rapidement. Elles existent dans des environnements basés sur le cloud et nécessitent une approche de développement qui facilite une collaboration fluide, des commentaires rapides et une capacité d’adaptation à l’évolution des exigences.

C’est exactement ce que proposent les outils CI/CD. Ils permettent aux développeurs de concevoir des applications logicielles rapides, agiles et fiables, ce qui est essentiel pour répondre aux besoins des clients et maintenir un avantage concurrentiel par rapport à la concurrence.

Développement traditionnel et CI/CD

Les stratégies et outils CI/CD permettent aux développeurs de s’affranchir des processus manuels lourds et souvent fastidieux qui accompagnent le développement traditionnel.

Le développement traditionnel suit un processus linéaire et séquentiel, où chaque étape, dont la collecte des exigences, la conception, le codage, les tests manuels et le déploiement, doit être achevée avant le début de la suivante, même s’il existe de longs intervalles entre chaque phase.

Chaque développeur était chargé d’intégrer manuellement le code dans les nouvelles versions d’une application ou d’un service. Différentes parties du code ne fonctionnaient pas toujours bien ensemble, et les développeurs intégraient leurs modifications selon des calendriers variés (parfois à la dernière minute), ce qui rendait le processus d’intégration long et sujet aux erreurs, surtout pour les grandes équipes de développement.

Les tests logiciels étaient également peu fréquents. Les équipes mettaient généralement en œuvre d’importantes mises à jour par lots et en une seule fois (souvent après la mise en œuvre du code), ce qui permettait aux bugs de passer entre les mailles du filet et de s’accumuler dans la base de code. Lorsque des problèmes survenaient, les développeurs peinaient à déterminer quel changement avait provoqué le problème.

En conséquence, les équipes ont fait face à des tâches de débogage et d’assurance qualité plus complexes, des taux d’échec plus élevés et des sorties de code plus lentes. De leur côté, les utilisateurs ont constaté davantage d’erreurs logicielles et de bugs, et les entreprises ont perdu des revenus à cause de l’inefficacité des processus.

La CI/CD automatise la plupart des aspects de la création, des tests et de la publication des logiciels. Les pipelines automatisés mettent en œuvre une intégration, des tests et un déploiement continus tout au long du cycle de développement, afin d’améliorer l’efficacité et la fiabilité des pipelines.

Les modifications de code sont continuellement et progressivement fusionnées dans un référentiel partagé, construites et testées automatiquement après chaque commit, puis rapidement déployées (parfois plusieurs fois par jour). Les petites modifications et les commits fréquents de code permettent aux développeurs de détecter les problèmes plus tôt et d’effectuer des restaurations plus facilement.

Grâce aux outils CI/CD, les équipes connaissent immédiatement les résultats de chaque commit, et tout le monde peut voir l’état de chaque build, test et déploiement. Ces fonctionnalités contribuent à accroître la transparence des pipelines pour les équipes de développement et d’opérations et à simplifier la collaboration inter-équipes.

 

Fonction

Développement traditionnel

CI/CD
Flux de pipelineLinéaire, échelonnéContinu, intégré
Fréquence de publicationTrimestriel, annuelQuotidiennement, chaque semaine
Concevoir, tester, déployerManuel, itératifAutomatisé, reproductible
TestsAprès un développement completAutomatisé, continu
Détection d’erreursCycle en retard, restauration plus difficileRestauration rapide et continue, facile
CommentairesLenteur, lors des étapesImmédiat, continu
CollaborationRôles cloisonnés, transfertsResponsabilité partagée, statut ouvert

Présentation de l’intégration continue

L’intégration continue est la première étape d’un pipeline CI/CD. Grâce à elle, les équipes DevOps peuvent améliorer en permanence leurs applications logicielles, recevoir des commentaires constructifs, détecter et corriger les erreurs avant qu’elles ne nuisent aux performances des logiciels et fournir des logiciels de meilleure qualité selon des calendriers de livraison plus prévisibles. 

Les développeurs envoient les modifications de code à une branche partagée ou principale d’un système de contrôle de version (Git, par exemple) pour suivre les changements de code au fil du temps, et la soumission déclenche un outil CI qui effectue une « compilation » de la base de code mise à jour. Le système CI récupère le nouveau code, le compile avec le code existant et le regroupe avec toutes les dépendances, telles que les fichiers de configuration, les bibliothèques ou toute autre ressource. Cela constitue la « compilation ».

Les outils de test exécutent une série de tests pour valider la conception avant qu’un « artefact de compilation » (le fichier résultant qui est transmis pour des tests supplémentaires ou vers un environnement de production) ne soit généré. L’étape suivante du pipeline est appelée livraison continue.

Explication de la livraison continue

La livraison continue (CD) intervient après la CI, automatisant la livraison des applications et des modifications validées du code (mises à jour, corrections de bugs, nouvelles fonctionnalités) dans toutes les infrastructures nécessaires pour les tests.

Les versions de code qui réussissent les tests d’intégration et les étapes de validation sont empaquetées et livrées dans des référentiels de code, qui centralisent et stockent les packs de code dans un état déployable. Les workflows testent à la fois le logiciel et toute dépendance, comme les interfaces de programmation d’application (API) connectées pour identifier et corriger les erreurs.

Le code est validé pour s’assurer que le logiciel fonctionne dans tous les scénarios. S’il passe la validation, le système informe les équipes DevOps que la dernière version est disponible. Les membres de l’équipe ont la possibilité de fournir des commentaires sur la nouvelle version et de faire des suggestions de modification.

Bien que la plupart des processus de CD soient automatisés, la CD exige que les équipes approuvent manuellement une version avant de la présenter aux utilisateurs finaux dans un environnement de production en direct. Cette fonctionnalité permet aux développeurs d’effectuer des mises à jour logicielles à risque contrôlé, de conserver des versions prêtes à être expédiées et de s’assurer que les bugs et les échecs des tests sont détectés avant la mise en production.

Déploiement continu expliqué

Le déploiement continu va plus loin en déployant automatiquement chaque modification approuvée en production, sans intervention humaine. À ce stade, les modifications de code ont passé tous les protocoles de tests nécessaires et sont donc prêtes pour le processus de publication.

Lorsque les mises à jour de code sont testées, validées et approuvées, les systèmes de déploiement continu déplacent l’artefact logiciel vers un environnement de pré-production ou vers des serveurs publics et des plateformes de distribution (comme les magasins d’applications) auxquels les utilisateurs peuvent accéder.

Les outils de déploiement continu offrent plusieurs avantages aux entreprises cherchant à dimensionner leurs applications et leurs portefeuilles informatiques. Surtout, ils accélèrent la mise sur le marché en minimisant le décalage entre le codage et la valeur pour le client.

Les équipes DevOps complètent parfois les services de déploiement continu avec d’autres outils de contrôle de déploiement, tels que les indicateurs de fonctionnalités, qui permettent aux développeurs d’activer ou de désactiver des fonctionnalités sans modifier ou redéployer le code source. 

Le pipeline CI/CD

Le pipeline CI/CD est un workflow automatisé qui rationalise le développement logiciel en intégrant, testant et déployant le code en continu. Il déplace le code de bout en bout, du développement à la production, garantissant que les mises à jour logicielles sont livrées rapidement, en toute sécurité et de manière fiable.

Workflow du pipeline CI/CD

Un pipeline CI/CD classique se compose de plusieurs processus et étapes automatisés tout au long du cycle de vie d’une version logicielle, notamment :

Approvisionnement

Les développeurs valident les modifications apportées à un système de contrôle de version, plaçant ainsi le projet dans le pipeline. L’étape de sourcing peut également impliquer le développement de stratégies de branchement et la réalisation de contrôles qualitatifs initiaux.

Conception

Le système compile le code et le transforme en artefacts déployables. Il effectue également des vérifications (telles que des analyses statiques, qui analysent et déboguent le code sans exécuter le programme) pour vérifier que le code est compilé correctement et est prêt à être testé davantage.

Tests

Des tests automatisés sont effectués sur des artefacts pour vérifier que le code fonctionne correctement, sans régression. Les tests unitaires, par exemple, peuvent valider des composants ou fonctions individuels, fournissant des retours immédiats sur le comportement attendu du code.

Transfert

La version testée est déployée dans un environnement de pré-production, qui reflète l’environnement réel, pour une validation finale. Tous les artefacts ne passent pas par le transfert, mais le transfert sert de terrain de test final où l’application est validée dans des conditions réelles avant d’être mise à disposition des utilisateurs finaux.

Par exemple, les développeurs peuvent lancer un déploiement bleu/vert, où les applications sont déployées dans deux environnements de production parallèles et chaque environnement exécute une version différente d’une application.

L’environnement « bleu » gère l’application en direct, tandis que l’environnement « vert » gère les tests et la validation des nouvelles versions de l’application. Lorsque la nouvelle version est adoptée, le trafic est acheminé vers l’environnement vert, qui devient l’environnement réel, et l’environnement bleu reste inactif, mais disponible, pour gérer les restaurations ou les tests des versions suivantes.

Déploiement

Les versions réussies avancent vers le processus de déploiement, où elles sont déplacées en production, fournissant des mises à jour et de nouvelles fonctionnalités aux utilisateurs finaux.

Surveillance

Après le déploiement, les outils de surveillance suivent en permanence les applications logicielles utilisées dans le monde réel afin de maintenir la performance, la stabilité et la sécurité du système. Les outils de surveillance aident à détecter les problèmes de code afin que les équipes DevOps puissent les résoudre rapidement et optimiser les futures versions.

CI/CD dans DevOps

La CI/CD est une partie fondamentale du DevOps, mais elle ne représente qu’un sous-ensemble des pratiques DevOps.

Le DevOps est un cadre qui décrit à la fois un processus de développement logiciel et un changement de culture d’entreprise qui favorise la coordination et la collaboration entre l’équipe de développement et les équipes chargées des opérations informatiques. Traditionnellement, ces deux groupes opéraient séparément. Dans la méthodologie DevOps, ils travaillent comme une seule équipe avec un ensemble de pratiques et d’outils partagés.

Une approche DevOps favorise la responsabilité partagée, la collaboration continue et l’optimisation des processus. Outre le pipeline de livraison de logiciels, son champ d’application couvre l’ingénierie des plateformes et des infrastructures, la sécurité, la conformité, la gouvernance et la gestion des risques.

En revanche, la CI/CD se concentre spécifiquement sur la conception, le test, le déploiement et l’amélioration d’applications logicielles. L’automatisation de ces processus améliore le DevOps en aidant les entreprises à renforcer la qualité du code, la couverture des tests, la gestion des dépendances et les indicateurs d’observabilité, et, en fin de compte, à publier plus souvent des logiciels plus performants.

Sécuriser les pipelines CI/CD

La sécurité CI/CD nécessite des pratiques, des processus et des technologies pouvant intégrer des mesures de sécurité et de conformité tout au long du pipeline.

Dans les modèles de développement traditionnels, la sécurité était souvent intégrée au logiciel à la fin du cycle de développement. Mais les progrès des plateformes cloud, des architectures de microservices et des applications conteneurisées ont modifié (et accéléré) le cycle de vie du développement logiciel, rendant les stratégies de sécurité traditionnelles obsolètes.

C’est alors qu’est arrivé le DevSecOps.

Le DevSecOps (abréviation de développement, sécurité et opérations) intègre les architectes et ingénieurs en cybersécurité à la stratégie DevOps afin de garantir que chaque composant d’application et chaque élément de configuration de la pile soient corrigés, sécurisés et documentés de manière proactive. Il s’agit d’une pratique de développement qui déplace les protocoles de sécurité de la droite (fin) vers la gauche (début) du pipeline de développement.

L’approche shift left consiste à ce que les membres de l’équipe mettent en œuvre des protocoles de sécurité (tels que le chiffrement des données, la validation des entrées, les contrôles d’accès basés sur les rôles et l’authentification à étapes) dès le départ. Cette approche permet aux équipes DevOps d’identifier rapidement les vulnérabilités de sécurité et de les corriger avant que les cybercriminels ne puissent les exploiter ou perturber les fonctionnalités logicielles. 

Le DevSecOps intègre également des activités « shift right », étendant les pratiques de sécurité aux environnements de production post-déploiement. Les pratiques shift right privilégient la surveillance, les tests et la protection des applications au moment de l’exécution, dans des conditions réelles. Elles complètent la sécurité shift left en créant une boucle de commentaires continue où les problèmes de sécurité découverts en production aident à éclairer les phases de développement antérieures.

Utilisées conjointement, les fonctions de sécurité shift left et shift right permettent aux entreprises d’intégrer des contrôles de sécurité à chaque phase du cycle de vie d’une application. Cette double stratégie de sécurité « shift everywhere » aide les équipes DevOps à mettre en œuvre à la fois une prévention précoce, une détection et une réponse aux menaces post-déploiement, améliorant ainsi la posture de sécurité globale et favorisant une amélioration continue.

Tendances, outils et technologies CI/CD

Plusieurs tendances et technologies clés façonnent la manière dont les applications logicielles sont créées, gérées et sécurisées dans les pipelines CI/CD :

Intelligence artificielle (IA) et machine learning (ML)

Les solutions CI/CD alimentées par l’IA peuvent aider les développeurs à créer des applications plus dynamiques, plus sûres et plus évolutives.

Une entreprise peut utiliser l’IA et des outils de ML pour surveiller en continu le code logiciel en temps réel afin d’identifier les risques de sécurité et les problèmes de qualité. Si ces outils détectent une anomalie, ils peuvent déclencher des workflows automatisés pour résoudre le problème. Un tel outil pourrait, par exemple, redémarrer un service défaillant ou allouer davantage de ressources pour faire face à une augmentation de la demande des utilisateurs.

De plus, contrairement aux méthodes de détection d’anomalies statiques, basées sur des seuils, les modèles d’IA tirent parti de données contextuelles et historiques pour prévoir les défaillances potentielles du pipeline avant qu’elles ne se produisent. Les fonctionnalités de prévision permettent aux équipes DevOps d’adopter une approche proactive de la gestion des applications, afin de prévenir les temps d’arrêt et les pannes.

De plus, les algorithmes de ML peuvent aider les équipes à optimiser les processus de tests continus. Par exemple, les entreprises peuvent utiliser des outils de ML pour identifier et réparer les tests incorrects (tests qui réussissent ou échouent de manière imprévisible) et automatiser la génération de cas de test en analysant les modifications de code, les défauts passés et le comportement des utilisateurs. Selon l’IDC, plus de 90 % des entreprises utilisent, expérimentent ou étendent leur utilisation des outils d’IA et de ML dans leurs pratiques de test logiciel.

 

Infrastructure en tant que code (IaC)

Le provisionnement de l’infrastructure (qui implique la configuration du matériel, du système d’exploitation et du réseau par du personnel spécialisé) peut créer des goulots d’étranglement. Les développeurs peuvent déployer le code de l’application en quelques minutes, mais la mise en place de l’infrastructure peut prendre des heures ou des jours.

L’infrastructure en tant que code (IaC) est « une pratique DevOps qui automatise le provisionnement et la gestion de l’infrastructure informatique en utilisant des fichiers de configuration plutôt que des processus manuels. » L’IaC traite l’infrastructure comme un logiciel, c’est pourquoi elle permet à l’infrastructure de se déplacer à la vitesse de développement d’un logiciel.

Les équipes peuvent utiliser l’IaC pour versionner, tester et déployer l’infrastructure en appliquant les mêmes modèles et pratiques que ceux utilisés pour le code des applications. En réalité, l’infrastructure et le code d’application peuvent être testés, validés et déployés en parallèle (au lieu d’utiliser des processus disparates).

Les développeurs peuvent rapidement provisionner des environnements bac à sable (environnements sécurisés et isolés où les équipes peuvent tester et exécuter du code sans affecter les applications en direct) et des environnements de production à la demande. Les équipes d’assurance qualité peuvent créer des environnements de test instantanément, avec une configuration cohérente. Les équipes d’opérations peuvent automatiser l’infrastructure pour les tests d’acceptation utilisateur et de sécurité.

De même, lorsque le nouveau code réussit les tests, l’application et son infrastructure peuvent être déployées ensemble, ce qui permet de proposer des fonctionnalités plus rapidement et des déploiements plus fréquents.

GitOps

GitOps est un cadre opérationnel moderne qui aide à accélérer la livraison de logiciels en appliquant des pratiques de codage centrées sur les développeurs (telles que les pull requests et les révisions de code) aux opérations d’infrastructure et aux pratiques de configuration logicielle.

L’IaC est au cœur du cadre GitOps. L’IaC définit et gère l’infrastructure par le biais du code et déclare l’état souhaité des systèmes. Ces configurations IaC sont souvent stockées sur des plateformes basées sur Git (GitHub, par exemple), avec un référentiel Git servant de source d’information unique pour le stockage et le contrôle des versions. Dans un pipeline CI/CD, les agents automatisés vérifient en permanence le référentiel pour détecter des modifications et appliquent les configurations aux systèmes actifs (déployés).

Par exemple, si une équipe DevOps souhaite déployer un nouveau microservice, elle apportera les modifications nécessaires aux fichiers de configuration Git. Les outils de déploiement examineront et valideront les mises à jour avant de les fusionner avec la branche principale du code. Ensuite, les pipelines CI/CD appliquent les modifications à l’infrastructure réelle (un cluster Kubernetes ou un conteneur Docker, par exemple) afin que l’environnement déployé corresponde toujours aux définitions du référentiel.

GitOps permet aux équipes de déployer des mises à jour de code plusieurs fois par jour, sachant que les outils Git détecteront et corrigeront rapidement toute anomalie. Ainsi, GitOps peut aider les équipes DevOps à réduire davantage les interventions manuelles et à minimiser la complexité du pipeline CI/CD.

Informatique sans serveur

Même dans un environnement DevOps, de nombreux développeurs de logiciels se retrouvent dépassés par la diversité et le volume de travail qui relève de leur compétence, en particulier lorsqu’ils doivent accomplir des tâches manuelles et répétitives. Plus des trois quarts des développeurs consacrent au moins 30 % de leur temps à des tâches aussi fastidieuses.

L’informatique sans serveur est un environnement de développement et un modèle d’exécution qui fait abstraction de la gestion de l’infrastructure des développeurs. Un fournisseur de services cloud fournit et gère tous les serveurs, composants d’infrastructure en back-end et environnements d’exécution, afin que les développeurs puissent se concentrer sur le code applicatif.

Les plateformes sans serveur prennent en charge les workflows pilotés par les événements, où les commits de code ou les pull requests déclenchent des builds, des tests et des étapes de déploiement automatisés, afin d’automatiser davantage le pipeline CI/CD.

Avantages du processus CI/CD

Les systèmes CI/CD offrent aux entreprises une gamme d’avantages, notamment :

  • Meilleure qualité logicielle  les pipelines CI/CD privilégient les tests continus du code et des logiciels afin que les bugs et les vulnérabilités soient détectés tôt dans les processus de développement et que les développeurs puissent fournir un code de meilleure qualité.
  • Délai de mise sur le marché plus rapide : le CI/CD permet des déploiements de logiciels plus rapides qui réduisent le délai entre la validation du code et la livraison du logiciel de plusieurs semaines à quelques minutes.
  • Moins de risques et de temps d’arrêt  les petites mises à jour de code fréquentes facilitent la résolution des bugs et des erreurs, préviennent les pannes à grande échelle et réduisent le temps moyen de réparation (MTTR).
  • Plus de transparence  les tableaux de bord CI/CD et les boucles de feedback continues permettent aux équipes DevOps d’avoir accès à toutes les informations dont elles ont besoin à tout moment, améliorant ainsi la transparence et la responsabilité.
  • Productivité améliorée : les pipelines CI/CD automatisent les étapes manuelles répétitives (dépannage des versions et gestion des scripts de déploiement, par exemple), afin que les développeurs puissent se concentrer sur les mises à jour, les nouvelles fonctionnalités et les nouvelles applications.

Auteur

Chrystal R. China

Staff Writer, Automation & ITOps

IBM Think

Solutions connexes
IBM Instana Observability

Exploitez le pouvoir de l’IA et de l’automatisation pour résoudre de manière proactive les problèmes de la pile d’applications.

Découvrir IBM Instana Observability
Solutions DevOps

Utilisez les logiciels et outils DevOps pour construire, déployer et gérer des applications cloud natives sur plusieurs appareils et environnements.

Découvrir les solutions DevOps
Services de conseil en cloud

Renforcez l’agilité et la croissance de votre entreprise. Modernisez en continu vos applications sur n’importe quelle plateforme grâce à nos services de conseil cloud.

Découvrir les services de conseil cloud
Passez à l’étape suivante

De la détection proactive des incidents avec IBM Instana aux informations en temps réel sur l’ensemble de votre pile, garantissez la fiabilité de vos applications cloud-native.

  1. Découvrez IBM Instana
  2. Découvrir les solutions DevOps