Published Date: April 1, 2021
CI/CD signifie « Continuous Integration/Continuous Delivery », ou intégration continue et déploiement continu ; c’est une méthode de mise en œuvre logicielle utilisée par les équipes de développement pour apporter des modifications de code plus fréquentes et plus fiables. Le CI/CD englobe deux ensembles de pratiques complémentaires, chacune reposant fortement sur l’automatisation.
Dans le processus d’intégration continue et déploiement continu, les équipes de développement implémentent régulièrement de petites modifications du code d’application et les fusionnent dans un référentiel partagé. Aujourd'hui, les applications sont développées à l’aide de divers outils CI/CD et plateformes : il faut donc un moyen d’intégrer et de valider chaque modification de code pour s’assurer qu’elle n’entrave pas le fonctionnement de l’application. L’intégration continue et le déploiement continu (ou CI/CD) automatisent le processus de création, de mise en paquets et de test du code chaque fois qu’un membre de l’équipe valide des modifications dans le contrôle de version. Grâce à cette approche, les équipes ont plus de facilité à modifier fréquemment le code, ce qui améliore la collaboration et la qualité des applications.
La livraison continue est un moteur de workflow CI/CD qui permet de lancer des processus tels que des tests de détection de bugs et le stockage des modifications de code faites par l’équipe de développement dans un dépôt temporaire.
Le processus CI/CD est important car il facilite les processus de déploiement et les rend plus prévisibles. Il apporte également cohérence et fiabilité au processus de développement logiciel, ce qui renforce la collaboration entre les équipes de développement et les opérations, réduit les coûts et améliore la qualité des applications
Dans cet article, nous vous proposons un petit tutoriel pour mieux comprendre le processus de pipeline CI/CD. Nous allons discuter de ses usages, des bonnes pratiques d’exécution et des nombreux avantages du CI/CD, intégration continue et déploiement continu, pour le cycle de vie du développement et, à terme, pour l’ensemble de votre entreprise.
Par définition, le DevOps CI/CD est une approche de la livraison IT qui conjugue des personnes, des pratiques et des outils pour abattre les silos qui isolent les équipes de développement et opérationnelles. Le DevOps jette un pont entre le développement logiciel, qui produit le code des applications, et les opérations IT, qui se chargent de mettre ces applications en production, de les mettre à la disposition des utilisateurs et d'assurer leur maintenance. Les équipes DevOps accélèrent le développement des applications et, grâce à une approche plus réactive de la gestion de l’infrastructure IT, les entreprises peuvent ainsi déployer et mettre à jour des produits pour rester compétitives dans leur secteur.
La naissance du DevOps CI/CD est en partie issue du mouvement de développement agile. Il a été créé pour résoudre l’un de ses problèmes clés : si les développeurs agiles produisaient de nouvelles applications et des mises à jour de code plus fréquemment, les équipes opérationnelles traditionnelles avaient du mal à les tester et à les déployer, sapant la valeur d’un développement rapide. En étendant les principes d’agilité à l’ensemble du cycle de vie du développement logiciel (SDLC), le DevOps optimise l’ensemble du workflow CI/CD dans un objectif d’amélioration continue. Les équipes DevOps hautement performantes n’observent pas seulement une accélération des itérations et du déploiement du code, mais aussi une réduction globale du délai de mise sur le marché des nouvelles idées, une baisse du nombre de bugs et une plus grande stabilité de l’infrastructure.
Le CI/CD du DevOps est un processus fondamental, car il permet aux développeurs d’intégrer régulièrement du nouveau code (souvent quotidiennement) au code source principal. Quand ce nouveau code est stocké dans un référentiel central partagé, un processus automatisé teste et valide les modifications, permettant aux développeurs d’identifier rapidement les problèmes et de recevoir des retours immédiats pour effectuer les ajustements nécessaires.
Le pipeline CI/CD est essentiellement un workflow qui permet aux équipes DevOps d’automatiser le processus de distribution de logiciels. Sans un pipeline automatisé, les équipes doivent configurer un workflow manuel, ce qui prend beaucoup de temps et entraîne potentiellement des erreurs. Le pipeline CI/CD permet d’éliminer les erreurs manuelles, normalise les boucles de rétroaction des développeurs et augmente la vitesse d’itération des produits.
Les prédécesseurs du CI/CD incluent l’automatisation des publications d'applications (ARA) et la gestion automatisée des publications (ARM), qui relèvent toutes deux de la catégorie « automatisation des publications » du travail et représentent de nouvelles itérations de l’évolution des processus automatisés et des tendances dans ce domaine.
Il n’existe pas de méthodologie ou de mise en œuvre standard du pipeline CI/CD, et chaque équipe DevOps devra choisir ses outils et services pour construire le sien. Cependant, un pipeline DevOps, comprend généralement les phases suivantes :
Phase source : les développeurs extraient et travaillent localement sur le code source des applications, stocké dans un dépôt central tel que GitHub. Ils créent ensuite une nouvelle branche pour la fonctionnalité ou le bug qu’ils veulent corriger, et exécutent des tests sur cette branche localement dans leur environnement de développement, avant de la valider dans le dépôt source.
Phase de construction : le nouveau code validé dans le dépôt source déclenche l’étape de construction, dans laquelle les codes de branche sont rassemblés et compilés pour construire une instance exécutable de la version. Les développeurs peuvent créer et tester leurs versions plusieurs fois par jour afin de détecter les erreurs dans le code. Ils reçoivent des alertes en cas d’échec d’une compilation ou autre problème, afin que l’équipe puisse le corriger dès que possible. Une fois le code exempt d’erreurs, il passe à la phase suivante.
Phase de test : la compilation passe par plusieurs tests pour valider le code et s’assurer qu’il fonctionne comme prévu. Le plus souvent, il s’agit de tests unitaires, au cours desquels l’application est divisée en petites unités de code qui sont testées individuellement, et de tests d’acceptation utilisateur (UAT), dans lesquels les utilisateurs testent l’application pour déterminer si le code nécessite d’autres modifications avant d’être déployé en production. Des tests de charge, de sécurité et autres tests continus peuvent être effectués à ce stade.
Phase de déploiement : Une fois que l’application est prête pour la production, les stratégies de déploiement sont variées. Le meilleur choix dépend du type d’application, du degré de révision qu’elle a subi, de l’environnement cible et d’autres facteurs. Voici des approches de déploiement modernes pour les applications cloud.
- Déploiement roulant : cette méthode livre l’application mise à jour par incréments jusqu’à ce que toutes les cibles aient la version à jour. Les déploiements roulants présentent moins de risques d’indisponibilité et sont faciles à annuler, mais nécessitent de prendre en charge à la fois les nouvelles et les anciennes versions de l’application.
- Déploiement bleu-vert : avec cette méthode, les développeurs exécutent deux versions de l’application en parallèle sur des infrastructures distinctes. La dernière version stable de l’application est exécutée dans l’environnement de production (bleu) et la nouvelle version est exécutée dans un environnement de simulation (vert) pour y tester les fonctionnalités et les performances. Lorsque les tests sont réussis, le trafic passe de l’environnement bleu à l’environnement vert, qui devient le nouvel environnement de production. Les déploiements bleu-vert sont rapides et faciles à mettre en œuvre, mais ils peuvent être coûteux si l’environnement de production répliqué est particulièrement complexe.
- Déploiement canari : dans ce modèle de déploiement, les développeurs mettent une application à la disposition d’un petit sous-ensemble d’utilisateurs qui font part de leurs commentaires. Lorsqu’il est certain que l’application fonctionne correctement, elle est déployée auprès du reste des utilisateurs. Cette stratégie permet aux développeurs de tester deux versions parallèles d’une application avec de vrais utilisateurs, et d’effectuer des mises à jour et des annulations sans interruption.
À chaque étape du pipeline, l’équipe de développement reçoit des alertes en cas d’erreur afin de résoudre immédiatement le problème. Et comme les modifications de code passent à nouveau par le pipeline, seul le code exempt d’erreurs est déployé en production.
Le déploiement continu consiste à automatiser la publication des modifications de code dans l’environnement de production. Il intervient après que le nouveau code a été intégré et approuvé via l’intégration et la livraison continues. Les modifications de code subissent une série de tests automatisés ; si les tests réussissent, elles sont immédiatement transmises aux utilisateurs du logiciel.
Le déploiement continu peut sembler synonyme de livraison continue, et les deux sont souvent désignés par l’abréviation « CD », mais ce sont deux pratiques distinctes. La livraison continue est un processus de livraison qui pousse automatiquement les nouvelles compilations dans un environnement de tests de QA automatisés où sont détectés bugs et autres problèmes. Quand les tests sont réussis, le code est approuvé pour déploiement et automatiquement poussé vers les utilisateurs finaux. Comme elle n’implique aucune intervention humaine, et donc aucune pause, cette dernière étape est appelée déploiement continu.
Bien que le déploiement continu augmente l’agilité et la vitesse de l’intégration continue et déploiement continu (ou CI/CD), il présente un certain nombre de risques, car il n’y a pas d’intervention manuelle entre le test final et la publication auprès des utilisateurs. Pour cette raison, il n’est pas adapté aux logiciels impliquant la protection de données sensibles, une conformité règlementaire ou des enjeux financiers élevés.
Le CI/CD est utilisé pour harmoniser et automatiser le développement logiciel afin de fournir des applications et des services plus rapidement et plus fréquemment. Pour ce faire, l’intégration continue et déploiement continu fait un grand usage de l’automatisation, qui accélère les tests, les retours, les corrections de code et le déploiement.
La mise en œuvre des pratiques CI/CD offre de nombreux avantages :
Des publications plus rapides et plus robustes : l’avantage le plus évident du CI/CD est qu’il accélère la livraison de logiciels et rend le processus plus efficace. Grâce à l’automatisation de la plupart des tests et des corrections de bugs, les développeurs peuvent se concentrer sur l’écriture de code et l’amélioration de la qualité de l’application.
Une détection plus précoce des bugs : grâce à des tests automatisés à chaque étape du pipeline CI/CD, les développeurs peuvent identifier les bugs et autres problèmes dès qu’ils se présentent (dès les toutes premières étapes dans la plupart des cas) et ainsi éviter des surprises potentiellement dévastatrices pendant le déploiement.
Une visibilité accrue : le pipeline CI/CD permet aux équipes de développement d’analyser les compilations, les résultats des tests et les erreurs de code de façon très détaillée. Elles bénéficient ainsi d’une meilleure perception des modifications qui ont créé les problèmes et les inefficacités, et peuvent plus facilement éviter la réapparition de ces problèmes.
Des boucles de rétroaction plus rapides : le CI/CD crée une boucle de retour constante que les développeurs peuvent utiliser à leur avantage pour expérimenter des fonctionnalités et améliorer l’expérience de l’application.
Des coûts réduits : l’approche automatisée de l’intégration continue et déploiement continu, ou CI/CD, réduit le nombre d’erreurs à chaque étape du processus de développement et simplifie la correction de celles qui se produisent. Les développeurs ne perdent plus de temps à des tâches manuelles et triviales et peuvent ainsi se consacrer à améliorer la qualité du code et optimiser les applications pour stimuler le ROI.
Des clients plus satisfaits : des versions plus fiables et des mises à jour plus fréquentes, ainsi que les corrections de bugs et l’ajout de nouvelles fonctionnalités vous distinguent de la concurrence auprès des clients.
Bien que l’orchestration et la mise en œuvre de chaque pipeline CI/CD varient légèrement, voici quelques instructions de base pour vous aider à résoudre les problèmes courants et à gérer le pipeline le plus efficace pour votre entreprise :
Utilisez un environnement cohérent : un pipeline CI/CD fiable doit toujours produire le même résultat pour une entrée donnée. Mais vous ne pouvez pas avoir un pipeline fiable si chaque exécution modifie son environnement : vous devez donc démarrer chaque workflow à partir du même environnement isolé.
Effectuez des analyses du pipeline : l’analyse du pipeline permet de visualiser la télémétrie de vos processus CI/CD, élargit la visibilité et augmente vos capacités de mesure, pour vous donner une image complète du fonctionnement de votre pipeline de livraison.
Validez tôt, validez souvent : la validation précoce et fréquente des modifications facilite l’identification des bugs car la quantité de code à analyser est moindre. Cette approche par petits lots améliore la qualité du code et permet aux équipes de procéder à des itérations plus efficaces
Compilez une seule fois : les pipelines CI/CD considérés comme performants intègrent généralement le processus de compilation à la première étape du processus CI/CD, et cette étape n’est exécutée qu’une seule fois, le résultat étant ensuite utilisé sur tout le pipeline. La réutilisation d’une même compilation permet d’éviter l’introduction de nouvelles incohérences au fil des étapes du pipeline.
Implémentez le contrôle de version : un système de contrôle de version est indispensable pour stocker le code source, suivre les modifications de code et rétablir les déploiements antérieurs en cas de besoin. Veillez à appliquer et utiliser le contrôle de version pour les scripts, la documentation, les bibliothèques et les configurations de votre application.
Développez par incrément : travailler en petites itérations, en décomposant une fonctionnalité en sous-fonctions plus petites et en utilisant des indicateurs uniques pour chacune d’elles, facilite la localisation des défauts et réduit le risque de problèmes d’intégration lors du passage en production
Voici quelques points à garder à l’esprit lors de la mise en œuvre d’un processus CI/CD :
Comprenez que le CI/CD est un workflow et un processus de déploiement, et non un produit : ne vous entêtez pas à rechercher « le bon outil ». Ce que vous attendez du processus d’intégration continue et de déploiement continu, c’est qu’il transforme votre développement logiciel afin de passer d’un processus manuel, lourd et lent à un processus automatisé, simple et rapide. Identifiez un point de départ, puis faites appel à un petit groupe enthousiaste de développeurs et de spécialistes des opérations pour mettre sur pied une preuve de concept et poursuivre les itérations jusqu’à ce que votre pipeline soit en place.
Planifiez la réussite : cette approche nécessite une planification technique complète dès le départ, car il faut notamment choisir des plateformes et refactoriser les applications pour les rendre compatibles avec des mises à jour itératives. Mais il ne faut pas non plus négliger les considérations culturelles lorsque l’implémentation dépassera le cadre du groupe initial pour s’étendre au reste de l’organisation. L’adhésion des responsables IT et métier est essentielle à la réussite à long terme.
Optimisez vos processus : avant de commencer à introduire les outils CI/CD dans votre pipeline de déploiement existant, prenez le temps d’évaluer vos processus et flux de travail actuels. S’ils ne sont pas efficaces, leur automatisation n’aura pas d’effet magique : commencez par y mettre de l’ordre avant de les intégrer dans le nouveau pipeline CI/CD.
Insistez sur l’amélioration continue : abordez le CI/CD avec un esprit ouvert, prêt à apprendre de vos erreurs et à vous améliorer en permanence. Vous devez donc veiller à ce que vos outils CI/CD fournissent des métriques continues que vous pourrez intégrer dans un tableau de bord commun afin que tous les participants puissent suivre les progrès et déterminer quels ajustements doivent être apportés et où.
Plusieurs facteurs entrent en ligne de compte lorsque vous recherchez des outils CI/CD à ajouter à votre chaîne d’outils de développement.
Premièrement, il s’agit de savoir si vous voulez utiliser un outil CI/CD open-source, un outil commercial (coude fourni) ou votre propre outil. Les solutions open source permettent de faire des économies, mais il se peut que les développeurs modifient radicalement le code ou cessent complètement de développer le produit. D’autre part, les outils open source s’accompagnent souvent d’un support minimal. Les outils commerciaux, en revanche, offrent généralement une assistance solide et des cycles de mise à jour plus prévisibles, mais ils peuvent être chers et leur intégration est parfois moins flexible. Élaborer votre propre solution vous permet de l’adapter aux besoins uniques de votre entreprise, mais nécessite beaucoup de ressources.
Ensuite, pensez au modèle d’hébergement de votre intégration continue et déploiement continu. Si votre base de code doit rester sur des machines locales, vous aurez besoin d’une chaîne d’outils que vous pouvez déployer sur vos propres serveurs ou votre infrastructure virtuelle. Il faut savoir que les outils CI/CD sont principalement alignés sur les infrastructures cloud ou cloud natives : ils sont donc aussi proposés sous une forme SaaS (logiciel en tant que service) et exécutés sur l’infrastructure cloud du fournisseur, ce qui vous permet de réduire la plupart des coûts de support.
Quelles que soient vos réponses à ces questions, vous devrez enfin tenir compte des coûts associés à la mise en place d’un outil d’intégration continue et de déploiement continu. En dépit des économies initiales permises par un outil open source, la mise en place et la prise en charge de l’outil sur votre propre infrastructure, ainsi que la baisse de productivité des développeurs pendant la période d’apprentissage, risquent d’avoir un coût important. Avec les outils commerciaux et SaaS, vous payez généralement des frais en fonction de votre utilisation.
Pour choisir la meilleure option pour votre entreprise, vous devrez donc déterminer le nombre de compilations que vous ferez, si vous effectuerez ou non des compilations simultanées et le nombre d’utilisateurs qui accéderont à l’outil.
La vitesse à laquelle vous livrez vos logiciels est un facteur de différenciation important sur le marché. Les entreprises qui réussissent affichent de 50 à 100 déploiements par jour, et quelques géants, comme Netflix, dépassent les 1 000 déploiements. Un pipeline CI/CD fonctionnel cultive la productivité, la fiabilité et la vitesse requises pour atteindre ces chiffres et livrer des applications robustes répondant aux besoins dynamiques de l’entreprise. En d’autres termes, si vous n’appliquez pas les pratiques CI/CD, vous risquez de vous faire distancer. Transformer votre méthode de livraison des logiciels n’est ni rapide ni facile, mais l’effort en vaut la peine et donnera à votre entreprise les moyens de réussir pendant les années à venir.
Qu’est-ce que le processus de pipeline CI/CD ?
Qu’est-ce que le déploiement continu ? Quelle est la différence avec la livraison continue ?
Comment utilise-t-on le CI/CD ?
Quelles sont les bonnes pratiques d’exécution du pipeline CI/CD ?
Comment mettre en œuvre le processus CI/CD ?
Quels sont les avantages/inconvénients de la mise en œuvre du CI/CD sur GCP et AWS?
Comment identifier la meilleure chaîne d’outils CI/CD ?
Pour résumer : Donnez à votre entreprise une longueur d'avance avec le CI/CD
Les 5 pratiques fondamentales du DevOps
Qu’est-ce qui distingue les équipes DevOps performantes de celles qui échouent ? Ces 5 pratiques fondamentales.