Qu’est-ce qu’un pipeline CI/CD ?

Un pipeline d’intégration et de livraison/déploiement continus (CI/CD) est formé d’une série d’étapes que traverse un logiciel pendant son cycle de développement, depuis la création du code jusqu’à son déploiement. Clé de voûte des DevOps, le processus CI/CD rationalise le développement des applications par l’automatisation des tâches répétitives, laquelle facilite une détection précoce des bugs, réduit les erreurs manuelles et accélère la livraison des logiciels.

Le pipeline CI/CD en bref

Le processus CI/CD réunit une série de processus automatiques qui vont du développement du code jusqu’à son déploiement en production. Cette structuration des processus facilite le déploiement fréquent de modifications du code en production. Il forme le socle des DevOps, une pratique du développement logiciel qui met l’accent sur la collaboration entre les équipes de développement (Dev) et les équipes opérationnelles (Ops), dans le but de raccourcir le cycle de développement sans nuire à la qualité logicielle.

Traduction pratique des principes de base du DevOps, le pipeline CI/CD établit le lien entre les équipes de développement, de test et des opérations. Dans cet environnement collaboratif, le processus CI/CD favorise une culture de partage des responsabilités pour la qualité des produits et le respect des calendriers de livraison.

Plusieurs étapes dans le pipeline CI/CD

Figure 1. Plusieurs étapes dans le pipeline CI/CD

Intégration continue (CI)

L’intégration continue (CI) est une pratique du développement logiciel dans laquelle les développeurs fusionnent régulièrement les modifications de code dans un dépôt central. Après chaque fusion, des processus de test et de développement automatisés s’exécutent pour intégrer le nouveau code au codebase existant, sans introduire d’erreur. Ce faisant, la CI minimise les difficultés habituelles de fusion des modifications à la fin d’un cycle de développement.

Livraison et déploiement continus (CD)

La livraison continue et le déploiement continu, tous deux abrégés CD, concernent les étapes qui suivent la CI. La livraison continue automatise le processus de versioning, en maintenant un état où toutes les versions du logiciel peuvent être déployées à tout moment dans un environnement de production. Elle maintient donc le logiciel dans un état de déploiement, et ce malgré les modifications permanentes dont il fait l’objet. De son côté, le déploiement continu va plus loin : chaque modification qui réussit les tests automatisés est automatiquement déployée en production, raccourcissant les délais d’autant.

La livraison continue et le déploiement continu prévoient tout deux le déploiement automatique de l’application dans divers environnements, par exemple en préproduction et en production, à l’aide de configurations d’infrastructure prédéfinies. Le pipeline CD incorpore des tests supplémentaires, notamment en matière d’intégration, de performance et d’analyse de sécurité, garantissant ainsi la qualité et la fiabilité de l’application.

Livraison continue vs déploiement continu

La grande différence entre la livraison continue et le déploiement continu porte sur l’étape finale d’intégration des modifications à l’environnement de production. Dans la livraison continue, l’étape finale du déploiement est un processus manuel, sorte de filet de sécurité qui permet de repérer les problèmes potentiels non détectés par les tests automatisés. Par contraste, le déploiement continu automatise le pipeline tout entier, y compris le déploiement final en production. Des mécanismes rigoureux de test et de suivi doivent donc être en place pour identifier et corriger les problèmes.

En résumé, le CI/CD peut faire référence à l’une ou l’autre de ces deux approches.

  1. Intégration continue et livraison continue (CI/CD)
  2. Intégration continue et déploiement continu (CI/CD)

Les entreprises qui mettent en place un pipeline CI/CD peuvent accélérer le time-to-market, établir des boucles de feedback continues et renforcer la qualité de leurs logiciels. Le processus CI/CD donne les moyens aux équipes développement (Dev), opérationnelles (Ops) et sécurité (Sec) de collaborer pour fournir des applications sécurisées, stables et ultra performantes.

Division des étapes CI/CD dans le pipeline

Figure 2 : Division des étapes CI/CD dans le pipeline

Fonctionnement du CI/CD : un jour dans la vie d’un pipeline

La journée d’un pipeline CI/CD débute par la première tasse de café d’un développeur. Une fois installé, ce dernier extrait la dernière version du code du système de contrôle de version Git. Disposant des dernières modifications, il se plonge dans sa mission du jour : créer de nouvelles fonctions et corriger les bugs.

Une fois sa tâche terminée, le développeur effectue un commit de ses modifications dans un dépôt partagé. Cette action déclenche le démarrage du pipeline CI/CD. Le pipeline, configuré avec webhooks, détecte le commit et déclenche l’étape de création du build. Au moyen d’un outil comme Jenkins ou CircleCI, le pipeline compile le code source pour en faire un exécutable. Par exemple, si le codebase est une application Java, l’opération passe par l’exécution d’un build Maven ou Gradle.

Ensuite, le pipeline convertit l’application en un artefact à déployer. S’il s’agit d’une application web, cette étape peut nécessiter la création d’une image Docker. Le pipeline transmet ensuite cette image à un registre Docker, par exemple Docker Hub ou un registre privé hébergé sur AWS ECR ou Google Container Registry.

Une fois le build terminé, le pipeline passe à l’étape de test et crée un environnement de test, souvent à l’aide d’un outil d’orchestration de containers comme Kubernetes. Il déploie l’application dans cet environnement et exécute une suite de tests automatisés. Ces tests peuvent inclure des tests unitaires exécutés par JUnit, des tests d’intégration exécutés par un outil comme Postman et des tests de bout en bout exécutés par Selenium.

Si les tests sont concluants, le pipeline passe à l’étape de déploiement, où il élimine l’environnement de test et crée un environnement de production. Le pipeline déploie ensuite l’application dans cet environnement, souvent en appliquant une stratégie de déploiement Blue/Green pour minimiser les interruptions et favoriser un rollback rapide si nécessaire.

La nature cyclique du pipeline d’intégration continue et de livraison/déploiement continu

Figure 3: La nature cyclique du pipeline d’intégration continue et de livraison/déploiement continu

Au cours de la journée, le pipeline répète ce processus pour chaque nouveau commit. En parallèle, il effectue également d’autres tâches: gestion de la migration des bases de données au moyen d’outils comme Flyway ou Liquibase, exécution d’analyse du code statique avec SonarQube et même mise à l’échelle automatique de l’environnement de production en fonction des schémas de trafic.

Le pipeline transmet également un feedback en temps réel à l’équipe de développement. Il notifie les résultats du build à un canal Slack, crée des tickets dans Jira pour les builds défaillants et actualise un tableau de bord d’indicateurs de performance du pipeline en temps réel.

Une fois sa journée terminée, le pipeline CI/CD se tient prêt à traiter son prochain commit, fidèle à sa mission de livraison de logiciels de qualité à un rythme soutenu. La journée d’un pipeline peut sembler monotone, mais chaque tâche accomplie rapproche l’équipe de son objectif de création de valeur pour ses utilisateurs.

Étapes d’un pipeline CI/CD

En tant que processus technologique, le CI/CD s’intègre aux systèmes de contrôle de version, aux serveurs de build et à d’autres outils de développement. Le pipeline standard englobe plusieurs étapes, chacune destinée à valider le code sous différents angles et à confirmer sa validité pour le déploiement.

Lorsqu’un développeur soumet le code au dépôt de contrôle de version, le pipeline se déclenche en automatisant les étapes de source, build, test et déploiement.

Phase de source

L’étape de source mobilise le système de contrôle de version, où les développeurs soumettent leurs modifications du code. Le pipeline CI/CD surveille le dépôt et déclenche l’étape suivante à la détection d’un nouveau commit. Git, Mercurial et Subversion comptent parmi les systèmes de contrôle de version couramment utilisés.

Phase de build

À l’étape de build, le pipeline CI/CD compile le code source et crée des artefacts exécutables. L’étape de build peut également inclure le packaging du code dans un container Docker ou un autre format de déploiement. Pour être fiable, le processus de build doit être reproductible et uniforme.

Phase de test

La phase de test du pipeline CI/CD passe par l’exécution d’une série de tests automatisés sur les artefacts créés. Ces tests peuvent inclure des tests unitaires, des tests d’intégration et des tests de bout en bout. Dans cette phase, l’automatisation des tests est indispensable pour identifier et corriger rapidement les problèmes.

Phase de déploiement

L’étape de déploiement est la dernière du pipeline CI/CD. Dans un processus de livraison continue, cette étape prépare le déploiement manuel de la version. Par contraste, dans un processus de déploiement continu, le pipeline déploie automatiquement la version dans l’environnement de production.

Types de pipelines CI/CD

Pour un programme simple, un pipeline CI/CD regroupe généralement les étapes source, build, test et déploiement. Les développeurs soumettent le code à un système de contrôle de version tel que Git. Le pipeline déclenche un processus de build pour compiler le code et créer les artefacts. Des tests automatiques sont pratiqués sur ces artefacts à des fins d’assurance qualité. Si les tests sont concluants, le pipeline déploie les artefacts dans un environnement de production. Les outils Jenkins, CircleCI ou GitLab CI/CD peuvent orchestrer ce processus.

Pipelines CI/CD cloud-native

Un pipeline CI/CD cloud-native capitalise sur la modularité intrinsèque des microservices pour faciliter leur développement et leur déploiement séparément les uns des autres. Lorsque chaque microservice possède son propre pipeline, les tests, la création des builds et le déploiement sont exécutés isolément. Le risque d’anomalies en cascade s’en trouve atténué et la livraison accélérée.

Dans le pipeline basé sur les microservices, la sécurité est appliquée à plusieurs niveaux. En particulier, chaque microservice est traité en tant que périmètre de sécurité potentiel, avec son propre ensemble d’autorisations et de contrôles. L’application de pratiques de sécurité des containers, par exemple l’analyse des images et la protection au runtime, préserve l’intégrité des microservices.

Très répandus parmi les technologies de pipeline cloud-native, les maillages de services comme Istio ou Linkerd proposent une méthode homogène pour sécuriser, connecter et surveiller les microservices en activant mTLS et d’autres fonctions similaires pour la communication interservices.

Les pipelines CI/CD cloud-native font appel aux outils cloud pour les dépôts de code, les serveurs de build et les cibles de déploiement. Dans AWS, un pipeline peut par exemple utiliser CodeCommit pour le contrôle de source, CodeBuild pour la création des builds et les tests, puis CodeDeploy pour le déploiement. Ces pipelines peuvent s’adapter à la demande, s’intégrer à des fonctions cloud-native et proposer une tarification à l’usage.

Pipelines «Kubernetes-native»

L’architecture extensible de Kubernetes s’adapte bien aux principes CI/CD, en ce sens qu’elle prend en charge une livraison rapide et fiable des applications. Le pipeline Kubernetes-native agit directement au sein d’un cluster Kubernetes, capitalisant ainsi sur ses fonctionnalités d’orchestration, de mise à l’échelle et de gestion des applications containerisées. Il peut déployer des applications containerisées sur plusieurs clusters, traiter les rollbacks et gérer la détection des services. Les étapes du pipeline, notamment build, tests et déploiement, sont exécutées en tant que pods Kubernetes, garants de l’isolement et du contrôle des ressources.

La sécurité dans les pipelines Kubernetes-native repose sur des pratiques spécifiques à Kubernetes. Par exemple, le contrôle d’accès basé sur les rôles (RBAC) sert à restreindre les autorisations des étapes du pipeline, limitant ainsi l’ampleur de l’impact d’un problème de sécurité potentiel. De plus, les politiques de sécurité des pods peuvent renforcer la posture de sécurité en limitant les capacités des containers qui exécutent les étapes du pipeline.

Des outils CI/CD comme Jenkins X, Tekton et Argo CD, conçus pour les pipelines Kubernetes-native, offrent des fonctions comme la promotion d’environnement via GitOps et des environnements de prévisualisation pour les pull requests

Pipeline CI/CD pour monorepo

Un monorepo est un dépôt contenant plusieurs projets logiques. Le pipeline CI/CD d’un monorepo doit être capable de gérer les modifications avec efficacité sur plusieurs projets. Il doit développer et tester uniquement les projets concernés par un commit, et non l’ensemble du dépôt.

Les développeurs peuvent recourir à des outils CI/CD évolués, tels que Bazel ou Cloud Build de Google, pour créer un graphe de dépendances du codebase, à partir duquel ils peuvent développer et tester une nouvelle fois les seules parties du codebase qui dépendent du code modifié.

La sécurité dans un pipeline CI/CD monorepo empêche les modifications de se répercuter sur d’autres composants. Les tests automatisés et l’analyse du code statique identifient en amont les problèmes de sécurité potentiels dans le pipeline. Les pratiques de revue du code doivent être rigoureuses pour maintenir l’intégrité du monorepo.

CI/CD dans le cloud

Les plateformes cloud proposent de puissantes fonctions pour l’implémentation de pipelines CI/CD, notamment une évolutivité illimitée, une disponibilité élevée et des mécanismes internes de reprise après sinistre.

L’élasticité des ressources cloud favorise l’évolutivité dynamique des processus CI/CD en fonction du workload, gage d’efficacité et d’optimisation des coûts. Un processus CI/CD dans le cloud est également bénéfique aux équipes de développement distribuées, car elle facilite la collaboration et une approche plus globale du développement logiciel.

CI/CD dans AWS

Amazon Web Services (AWS) propose une suite d’outils pour mettre en œuvre un pipeline CI/CD. AWS CodeCommit, un service de contrôle de source entièrement managé, héberge des dépôts Git sécurisés et facilite le codage et le contrôle de version collaboratifs.

Le service de création de build managé AWS CodeBuild compile le code source, exécute les tests et produit des packages logiciels prêts à déployer. AWS CodePipeline, un service d’intégration continue et de livraison continue, orchestre le workflow du code source jusqu’au déploiement, vous permettant de modéliser, visualiser et automatiser votre processus de création de versions logicielles.

Enfin, le service de déploiement automatisé AWS CodeDeploy simplifie le déploiement d’applications dans divers services AWS comme AmazonEC2, AWSLambda ou AmazonECS. AWS s’intègre également à d’autres outils open-source courants pour former une solution CI/CD complète et flexible.

CI/CD dans Azure

Le service cloud AzurePipelines prend en charge l’intégration continue et la livraison continue. Compatible avec tous les langages et toutes les plateformes, il forme une solution polyvalente pour une diversité d’environnements de développement.

AzureRepos fournit un nombre illimité de dépôts Git privés hébergés dans le cloud, permettant aux équipes de collaborer et de gérer leur code avec efficacité. Azure Test Plans est une solution complète pour gérer, tracer et planifier les activités de test et garantir une livraison de logiciels de haute qualité.

Azure propose également une série d’extensions et d’intégrations avec les outils open-source courants pour enrichir ses capacités en tant que plateforme CI/CD.

CI/CD dans GoogleCloud

Google Cloud Platform (GCP) propose Cloud Build for CI/CD, un produit sans serveur permettant aux développeurs de concevoir, tester et déployer des logiciels dans le cloud. CloudBuild vous permet de définir des workflows personnalisés pour la conception, les tests et le déploiement sur de multiples environnements: VM, architectures sans serveur, Kubernetes, Firebase et autres.

Google Cloud Source Repositories est une plateforme centralisée qui permet de stocker, gérer et assurer le suivi du code. Elle offre ainsi un dépôt Git sécurisé, évolutif et à haute disponibilité. GCP s’intègre également à des outils open-source courants comme Git, Jenkins et Spinnaker, pour aboutir à une solution CI/CD flexible et personnalisable.

CI/CD dans IBMCloud

IBMCloud propose un ensemble complet d’outils pour implémenter un pipeline CI/CD. Le service IBM Cloud Continuous Delivery fournit des chaînes d’outils incluant des intégrations et des modèles d’outils ouverts pour automatiser la création des builds, le déploiement et la gestion des applications.

IBM Cloud Code Engine est une plateforme sans serveur intégralement managée qui exécute vos workloads containerisés, dont vos applications web, microservices, fonctions basées sur les événements ou traitements par lots. IBM Cloud s’intègre également aux outils open-source courants tels que Git, Jenkins et Tekton, offrant ainsi une alternative polyvalente pour l’implémentation CI/CD.

Pipelines CI/CD: les bonnes pratiques

Pour améliorer votre workflow DevOps et la livraison de logiciels, intégrez ces bonnes pratiques à votre cycle de développement.

Dépôt source unique

Un dépôt source unique vous servira de système de gestion du code source, qui centralise le stockage de tous les fichiers et scripts nécessaires à la création des builds. Le dépôt doit inclure tous les composants, du code source à la structure des bases de données, en passant par les bibliothèques, les fichiers de propriétés et le contrôle de version. Il doit également héberger les scripts de test et les scripts de création d’applications.

Le recours à un dépôt source unique améliore la collaboration, favorise l’homogénéité, simplifie le contrôle de version, réduit le risque de conflit et facilite le suivi des modifications.

Créez le build une seule fois

Compilez le code et créez les artefacts du build une fois seulement, puis faites progresser les artefacts dans le pipeline. Cette pratique favorise l’uniformité en évitant les divergences susceptibles de survenir lorsque le code est développé à chaque étape.

Automatisez le processus de build

L’automatisation de la création des builds, à savoir la conversion du code en artefacts prêts au déploiement, s’affranchit des erreurs humaines et accélère le processus de développement. Vos scripts de build doivent être complets pour créer tous les composants avec une seule commande: fichiers serveur web, scripts de bases de données, logiciels applicatifs, etc. Les processus CI doivent automatiquement créer les paquets et compiler le code en une application exploitable.

Privilégiez l’automatisation

Automatisez le plus possible, de l’intégration du code aux tests et au déploiement, en passant par le provisionnement et la configuration de l’infrastructure. L’automatisation permet de gagner en efficacité tout en garantissant la répétabilité. Une fois que les développeurs ont transféré le code au dépôt partagé, le serveur CI lance automatiquement un processus de build et de test, qui en parallèle détecte les éventuels problèmes. Ce processus réduit radicalement le travail d’intégration manuelle des développeurs et les recentre sur les améliorations du code.

Testez tôt et souvent

Intégrez des tests automatisés dès les premières étapes du pipeline. Exécutez des tests unitaires après l’étape de build, suivis de tests d’intégration et de tests de bout en bout. Créez les scripts de test de telle sorte qu’ils recalent le build si le code échoue au test.

Utilisez des environnements de test de clones

Testez le nouveau code dans un environnement jumeau de l’environnement de production, plutôt que dans l’environnement de production réel. Appliquez des scripts de test rigoureux dans cet environnement cloné pour détecter et identifier les bugs éventuels non repérés dans le processus de test initial de la version prébuild.

Déployez fréquemment

Des déploiements fréquents réduisent le volume des modifications, facilitant ainsi l’identification et la correction des problèmes. De plus, ils contribuent à un feedback plus rapide, simplifient les rollbacks et accélèrent l’apport de valeur aux utilisateurs.

Imposez le CI/CD comme seul moyen de déploiement

Interdisez les déploiements manuels en production. Toutes les modifications doivent passer par le pipeline pour garantir que chaque modification est testée, cohérente et traçable.

Misez sur la visibilité

Les équipes de développement doivent avoir accès aux derniers exécutables, ainsi qu’à un historique de toutes les modifications apportées au dépôt. Le contrôle de version doit être utilisé pour gérer les handoffs et permettre aux développeurs d’identifier la version la plus récente.

Optimisez la boucle de feedback

Configurez le pipeline pour qu’il transmette un feedback rapide et utile. Les développeurs doivent être avertis immédiatement si leurs modifications cassent le build ou échouent aux tests. Un feedback rapide favorise une remédiation sans délai et fluidifie la progression dans le pipeline.

Nettoyez les environnements après chaque version

Automatisez le nettoyage des environnements de test et de préproduction après chaque version pour économiser des ressources et reprendre chaque déploiement dans un état vierge.

Pipelines CI/CD: KPI

Temps de cycle ou de déploiement

Le temps de cycle, également appelé temps de déploiement, représente le délai entre le commit du code et le déploiement en production. Il constitue un indicateur central de l’efficacité du pipeline CI/CD. Un temps de cycle court accélère la création de valeur pour les utilisateurs et le feedback pour les développeurs.

Fréquence de développement

La fréquence de développement traduit la fréquence de commit des modifications du code dans le système de contrôle de version. Une fréquence de développement élevée indique un processus de développement dynamique, où des modifications plus gérables et à portée plus restreinte réduisent le risque d’erreur.

Délai de modification

Le délai de modification représente le délai entre le commit de la modification et son déploiement, révélant ainsi la vitesse du pipeline CI/CD. Un délai court aboutit à une production de valeur accélérée et à des boucles de feedback plus rapides.

Taux d’échec des modifications

Le taux d’échec des modifications est le pourcentage de modifications qui mènent à une défaillance en production. Un taux bas est le signe d’un processus de livraison logicielle de haute qualité. Le taux d’échec des modifications dépend de la qualité des tests, des pratiques de revue de code, des pratiques de déploiement et d’autres facteurs.

MTTR vs MTTF

Le délai moyen de reprise (MTTR) et le délai moyen avant défaillance (MTTF) sont des indicateurs de la fiabilité du pipeline CI/CD. Le MTTR représente le délai moyen pour récupérer d’une défaillance, tandis que le MTTF mesure la durée moyenne entre deux défaillances consécutives. Un indicateur MTTR bas et un indicateur MTTF élevé sont révélateurs d’un pipeline fiable.

Video 1: Nouvelles technologies et DevOps : cap sur des méthodologies plus avancées

Outils CI/CD

Outils d’intégration continue

Codefresh

Codefresh est une plateforme CI/CD conçue pour Kubernetes. Elle prend en charge le cycle complet de développement d’applications, du commit jusqu’au déploiement. Son infrastructure Docker-native caractéristique permet de créer rapidement des builds isolés et offre un environnement polyvalent pour le développement, les tests et le déploiement d’applications containerisées.

Bitbucket Pipelines

Bitbucket Pipelines est un service CI/CD intégré à Bitbucket. Il permet aux équipes de développement de concevoir, tester et déployer automatiquement le code selon un fichier de configuration dans leur dépôt. Son intégration étroite avec Bitbuck et la suite d’outils Atlassian peut nettement fluidifier le travail des équipes appartenant déjà à l’écosystème Atlassian.

Jenkins

Jenkins est un serveur d’automatisation open-source où les développeurs peuvent concevoir, tester et déployer leurs logiciels en toute fiabilité. Grâce à sa prise en charge étendue des plug-ins et des builds distribués, cet outil s’avère extrêmement flexible pour les pipelines CI/CD complexes.

CircleCI

CircleCI est une plateforme d’intégration et de livraison continues de nouvelle génération qui accélère le développement logiciel et la création de versions. Axé sur la simplicité et l’efficacité, CircleCI offre des fonctions intelligentes de mise en cache automatique, de parallélisme et d’orchestration des tâches pour optimiser le processus de livraison des logiciels.

Bamboo

Bamboo, autre outil de la suite Atlassian, fournit des fonctions d’intégration et de livraison continues avec intégration des logiciels Git et JIRA. Même s’il n’est pas aussi extensible que Jenkins, Bamboo possède des fonctions prêtes à l’emploi qui simplifient la configuration pour les équipes de développement en quête d’une implémentation rapide et sans complication.

GitLab CI

GitLab CI, partie intégrante de GitLab, est une solution solide qui prend en charge la totalité du cycle DevOps. GitLab CI propose des configurations de pipeline flexibles et une intégration étroite avec le suivi des anomalies et le contrôle de source de GitLab, offrant une solution tout-en-un de développement et déploiement logiciel.

Outils de livraison et de déploiement continus

Codefresh

Codefresh prend en charge la livraison continue en plus de ses fonctionnalités d’intégration continue. L’isolement de son environnement et sa prise en charge des graphiques Helm assurent une livraison efficace et fiable des applications Kubernetes.

Argo CD

Argo CD est un outil de livraison continue GitOps déclaratif pour Kubernetes. Utilisant les dépôts Git comme source d’informations centralisée pour la définition des applications, il synchronise automatiquement l’application lorsque des modifications sont détectées dans le dépôt.

GoCD

GoCD est un outil open-source spécialisé dans la modélisation et la visualisation de workflows complexes de livraison continue. Sa cartographie de la chaîne de valeur permet de visualiser toute la séquence, du commit au déploiement, pour mieux cerner et contrôler le processus de livraison de logiciels.

AWS CodePipeline

AWS CodePipeline est un service de livraison continue entièrement managé qui automatise les pipelines de création de version, gage de mises à jour rapides et fiables des applications. Comme il appartient à la suite AWS, CodePipeline s’intègre en toute transparence aux autres services AWS, d’où une gestion et une automatisation efficaces de l’ensemble du processus de création de version dans l’écosystème AWS.

Azure Pipelines

Partie intégrante des services Azure DevOps de Microsoft, Azure Pipelines, est un service cloud qui fournit des fonctionnalités CI/CD pour les applications, quels que soient leur langage et leur plateforme. Il se distingue par ses capacités étendues d’intégration, son interopérabilité avec les principaux outils et services couramment utilisés en développement, et ses minutes gratuites illimitées de développement pour les projets open-source.

Spinnaker

Spinnaker, la plateforme multicloud de livraison continue initialement développée par Netflix, offre des possibilités de configuration étendues et de puissantes fonctionnalités de déploiement transverses à plusieurs fournisseurs cloud. Privilégiant le déploiement, Spinnaker prend en charge plusieurs stratégies comme les versions Blue/Green et Canary, qui offrent un niveau de contrôle élevé sur le processus de livraison.

Applications CI/CD de machine learning

MLOps

MLOps, abréviation composée de machine learning et opérations, est une méthode visant à standardiser et rationaliser le cycle de développement et de déploiement d’un modèle de machine learning. Elle applique les principes CI/CD pour automatiser les tests, le déploiement et le suivi des modèles de machine learning, dans une perspective de fiabilité et d’uniformité des livraisons.

Techniques de génération de données synthétiques

Dans le développement de modèles de machine learning, la génération de données synthétiques est une méthode de création de données qui imitent des données réelles. Dans les pipelines CI/CD, cette approche est utile pour tester ces modèles, car elle fournit une méthode évolutive et conforme aux impératifs de confidentialité pour évaluer leur performance et leur exhaustivité.

Plateformes AIOps

L’AIOps, abréviation d’intelligence artificielle pour opérations informatiques, intègre l’IA et les techniques de machine learning dans les opérations IT. Dans le contexte CI/CD, l’AIOps peut automatiser et améliorer de nombreuses tâches opérationnelles, comme la détection des anomalies, la corrélation des événements et l’analyse des causes racines, avec à la clé une livraison de logiciels plus efficace.

Sécurité CI/CD

La vitesse et l’automatisation de la méthode CI/CD génèrent de nouveaux risques pour la sécurité, notamment :

  • Exposition de données sensibles
  • Utilisation de composants tiers non sécurisés
  • Accès non autorisé si les outils CI/CD ne sont pas correctement protégés

Mais en priorisant la sécurité CI/CD par l’intégration de pratiques et d’outils de sécurité tout au long du pipeline, les entreprises peuvent s’assurer que les logiciels qu’elles fournissent sont à la fois fonctionnels et sécurisés. Cette pratique prend le nom de DevSecOps.

Pratiques de codage sécurisées

Les développeurs doivent appliquer des pratiques de codage sécurisé pour éviter d’introduire des vulnérabilités de sécurité dans le codebase. Les pratiques à privilégier sont notamment la validation des entrées, une gestion rigoureuse des erreurs et l’application du principe du moindre privilège.

Tests de sécurité

Intégrez des tests de sécurité automatisés dans le pipeline CI/CD. Analyse du code statique, analyse dynamique, tests d’intrusion… Plusieurs tests peuvent contribuer à repérer des vulnérabilités de sécurité avant le déploiement de l’application.

Sécurité du déploiement

La sécurité du déploiement passe par l’utilisation de protocoles sécurisés pour la transmission des données, la gestion des autorisations et les contrôles d’accès pendant le processus de déploiement, puis par un monitoring de l’application en production pour détecter d’éventuels incidents de sécurité.

Architecture sécurisée de pipeline CI/CD

Une architecture sécurisée de pipeline CI/CD intègre des contrôles de sécurité à chaque étape du pipeline. Utilisez des dépôts sécurisés pour le contrôle de source, effectuez des contrôles de sécurité pendant le processus de build, exécutez des tests de sécurité automatisés et appliquez des pratiques de déploiement sécurisées.

Sécurité IaC

Pratique incontournable en DevOps, l’IaC (Infrastructure as Code) est une méthode de gestion et de provisionnement de l’infrastructure informatique par des fichiers de définition lisibles par machine. La sécurité IaC suppose de gérer ces fichiers de définition et de protéger l’infrastructure qu’ils créent. Chiffrez les données sensibles, limitez l’accès aux fichiers IaC et effectuez régulièrement des audits de conformité de l’infrastructure en matière de sécurité.

Regard prospectif sur les nouvelles tendances CI/CD

Microservices et architectures sans serveur

À l’heure où les entreprises se tournent de plus en plus vers les microservices et les architectures sans serveur, les pipelines CI/CD doivent s’adapter pour gérer des déploiements plus complexes. Toute la difficulté réside dans le déploiement et la gestion de multiples services interdépendants, chacun pouvant utiliser des technologies et des plateformes de déploiement différentes.

Intelligence artificielle et machine learning

L’IA et le ML sont de plus en plus employés pour optimiser les pipelines CI/CD. Parmi leurs applications potentielles dans le contexte CI/CD, on peut citer la prédiction et la prévention des problèmes potentiels, l’optimisation de la consommation des ressources et l’automatisation de tâches plus complexes.

Infrastructure as Code (IaC)

L’IaC se généralise dans le monde du DevOps. À mesure qu’ils gagnent en maturité, les outils et pratiques IaC joueront un rôle toujours plus central dans les pipelines CI/CD.

Pipelines CI/CD : les questions fréquentes

La gestion des configurations est un processus d’ingénierie des systèmes visant à établir et à maintenir la cohérence des attributs physiques, fonctionnels et de performance d’un produit avec ses exigences, sa conception et ses informations opérationnelles tout au long de sa durée de vie. En développement logiciel, la gestion des configurations englobe la gestion, l’organisation et le contrôle systématiques des modifications aux documents, aux codes et aux autres entités pendant le processus de développement.
Dans le contexte CI/CD, l’orchestration du pipeline se rapporte à l’automatisation et à la gestion de la séquence de tâches qui se déroulent entre le commit du code et son déploiement. L’orchestration vise à renforcer l’efficacité et la fiabilité du pipeline sous plusieurs angles :
  • Rationalisation de ces processus
  • Vérification de leur ordre de séquencement
  • Traitement des éventuelles dépendances entre les tâches

Jenkins, CircleCI et Bamboo sont des outils CI/CD courants pour l’orchestration des pipelines. Quant à Kubernetes, il gagne du terrain dans ce domaine, notamment pour les architectures de microservices.

Un dépôt d’artefacts est un emplacement de stockage des artefacts binaires et autres artefacts logiciels créés pendant le processus de développement. Il peut regrouper le code compilé, des bibliothèques, des modules, des images serveur ou des images de containers. Par exemple, JFrog Artifactory et Sonatype Nexus sont des dépôts d’artefacts qui fournissent le contrôle de version, des métadonnées et d’autres fonctions pour faciliter le stockage, l’extraction et la gestion de ces artefacts.
Le contrôle de version, également appelé contrôle de source, est un système qui enregistre les modifications dans un fichier ou un ensemble de fichiers au fil du temps pour pouvoir rappeler ultérieurement des versions particulières. Il vous permet entre autres de rétablir des fichiers sélectionnés à un état antérieur, de ramener le projet tout entier à un état antérieur, de comparer les modifications dans le temps et de savoir qui a modifié en dernier un élément susceptible de causer un problème.
Dans le contexte CI/CD, un dépôt centralisé (« single source of truth » en anglais) représente une source unique d’informations que tous les acteurs considèrent comme la version définitive. Se rapportant généralement au codebase d’un système de contrôle de version comme Git, un dépôt centralisé garantit que les membres des équipes Dev et Ops travaillent avec les mêmes données, de manière à réduire les incohérences et les conflits. Le dépôt centralisé fournit une base fiable pour développer, tester et déployer des logiciels.
Les contrôles d’accès basé sur le pipeline sont des mesures de sécurité qui définissent les utilisateurs autorisés à interagir avec un pipeline CI/CD et les modalités associées. Ces contrôles peuvent restreindre les utilisateurs autorisés à déclencher un pipeline, apporter des modifications à sa configuration ou accéder aux résultats du build. Ces contrôles sont essentiels pour maintenir l’intégrité du processus de développement et de déploiement, éviter les modifications non autorisées et préserver la conformité aux politiques de sécurité.
Les stratégies dites de « branching » du processus CI/CD prennent plusieurs formes. Dans les branches de fonctionnalités, les nouvelles fonctions sont développées dans des branches séparées, puis fusionnées dans la branche principale. En développement sur tronc (trunk), les développeurs travaillent sur une même branche, avec des branches de fonctionnalités éphémères. Quant à Gitflow, il utilise plusieurs branches pour le développement, la préproduction et la production, chacune affectée à une étape différente dans le pipeline CI/CD.
Le développement sur tronc est une méthode de développement logiciel où tous les développeurs travaillent sur une même branche, la « branche principale », ou « tronc ». Les développeurs intègrent fréquemment leurs modifications dans cette branche principale, généralement une fois par jour, pour favoriser l’intégration et réduire la complexité des fusions.
ua-parser-js est une bibliothèque JavaScript compacte qui détecte le type et le modèle du navigateur, du moteur, du système d’exploitation, du processeur et de l’appareil à partir des données d’un agent utilisateur. La bibliothèque peut s’avérer utile pour l’analytique, en servant des pages web ou des ressources différentes selon l’environnement de l’utilisateur. Elle présente également un intérêt dans les situations où l’identification de l’appareil et du navigateur de l’utilisateur enrichit l’expérience utilisateur ou fournit des métriques utiles.
Un modèle de maturité de livraison continue est un cadre permettant aux organisations d’évaluer leur aptitude et leur degré de maturité dans la mise en œuvre de pratiques de livraison continue. Il comporte généralement plusieurs niveaux (initial, managé, optimisé…), chacun associé à des bonnes pratiques et capacités spécifiques. Le modèle permet aux entreprises d’identifier les domaines à améliorer et de préparer leur parcours vers des pratiques plus abouties.
Dans le contexte des systèmes de contrôle de version, un commit de code correspond à l’acte d’enregistrement des modifications à un codebase dans un dépôt. Chaque commit représente une modification ponctuelle du code, souvent accompagnée d’un message descriptif. Les commits créent un historique des modifications, qui permet aux développeurs de suivre la progression, de comprendre les changements et de revenir à des versions antérieures si besoin.
L’exécution d’un pipeline fait référence au processus d’exécution de toutes les tâches définies dans un pipeline CI/CD, généralement déclenché par un commit de code ou un événement planifié. Ce processus comporte l’exécution d’étapes comme le build, les tests et le déploiement, en série ou en parallèle selon la configuration du pipeline. L’exécution est visualisable sous forme de flux de tâches, chacune dépendant de l’achèvement des précédentes, afin d’aboutir à un code prêt pour le déploiement.
La couverture de code est un indicateur permettant d’évaluer le degré d’exécution du code source d’un programme lors d’une suite de tests particuliers. Elle identifie les lignes de code exécutées ou non pour vous donner une idée de l’exhaustivité de votre suite de tests. Une couverture de code élevée peut contribuer à éviter que des bugs se faufilent jusqu’en production.
L’analyse de code statique est une méthode de débogage qui examine le code source avant l’exécution d’un programme. Pour ce faire, elle analyse une partie du code par rapport à un ou plusieurs ensembles de règles de codage. L’analyse de code statique contribue à identifier les vulnérabilités potentielles, les bugs et les infractions aux standards de codage définis, et ce afin de renforcer la qualité et la sécurité du code. Les pipelines CI/CD intègrent souvent des outils d’analyse statique du code.
Les tests unitaires sont une méthode de test de logiciel, où les composants individuels d’une application logicielle sont testés séparément. L’objectif est de vérifier que chaque unité constituant le logiciel se comporte comme prévu. Une unité exprime le plus petit élément logiciel qu’il est possible de tester, souvent une fonction ou une méthode. Les tests unitaires sont généralement automatisés et écrits par les développeurs pour vérifier que leur code est correct et favoriser la détection de problèmes à un stade précoce du cycle de développement.
Les tests d’intégration sont un type de test logiciel où des unités individuelles sont regroupées et testées en tant que groupe. L’objectif consiste à détecter les anomalies dans l’interaction des unités intégrées. Les cas de test sont créés dans le but explicite d’essayer les interfaces entre les unités. Des testeurs mènent cette activité après les tests unitaires, selon une approche descendante, ascendante ou en sandwich. Les tests d’intégration peuvent révéler des problèmes tels que des incohérences d’interface, des problèmes de communication ou des erreurs liées aux données que les tests unitaires n’ont pas détectées.
Les tests de régression font référence à un type de test logiciel qui confirme que les logiciels déjà développés et testés se comportent toujours comme prévu après des modifications. Le but est de repérer les nouveaux bugs, ou régressions, causés par des modifications apportées au logiciel. Les tests de régression sont réalisables à tous les niveaux de test et sont souvent automatisés pour éviter l’introduction de défauts dans des fonctionnalités auparavant opérationnelles.
Les « flaky tests » sont des tests automatisés qui affichent un résultat à la fois concluant et non concluant avec le même code. Ils sont imprévisibles car le résultat peut changer sans aucune modification du code. Plusieurs facteurs peuvent produire des flaky tests, parmi lesquels des problèmes de timing, des dépendances dans des états particuliers ou des opérations asynchrones. Ils peuvent miner la confiance dans une suite de tests et doivent donc être identifiés comme tels, puis corrigés ou éliminés.
Les commutateurs de fonctionnalités, ou « feature flags », sont une technique de développement logiciel permettant aux développeurs d’activer ou de désactiver des fonctions dans un produit logiciel pour les tester et rétablir rapidement celles qui posent problème à un état antérieur. Les développeurs peuvent recourir aux commutateurs de fonctionnalités même après le déploiement du logiciel en production.
Une version Canary est une technique destinée à réduire le risque associé aux nouvelles versions logicielles en production. La méthode consiste à déployer progressivement la modification à un sous-ensemble restreint d’utilisateurs avant son déploiement à toute l’infrastructure. Elle est destinée à repérer les problèmes potentiels et les bugs non détectés pendant la phase de test, avec un impact minimal sur la base d’utilisateurs.
Un déploiement Blue/Green est une stratégie de gestion des versions qui réduit les interruptions et les risques par l’exécution de deux environnements de production identiques, désignés Blue (bleu) et Green (vert). Un seul environnement est actif à la fois et il sert tout le trafic de production. Lors de la création d’une nouvelle version de l’application, l’environnement inactif est actualisé, testé et, une fois prêt, converti en environnement actif. Les déploiements Blue/Green assurent un rollback rapide en cas de problème détecté dans la nouvelle version.
L’orchestration des versions est le processus de coordination des diverses tâches entrant dans le déploiement des modifications logicielles en production. Elle englobe la gestion des dépendances entre les tâches et l’automatisation des workflows, tout en s’assurant que l’exécution de chaque étape s’effectue dans le bon ordre, du commit de code jusqu’au déploiement. Les outils d’orchestration des versions apportent de la visibilité au processus de création de version pour aider les équipes à gérer les déploiements complexes et à réduire les risques.

La cartographie de la chaîne de valeur (VSM, Value Stream Mapping) est une méthode de lean management consistant à analyser l’état actuel de la série d’événements qui mènent un produit du concept à la livraison, puis à concevoir son état futur. Dans le contexte de l’approche CI/CD, le VSM fournit une représentation graphique du flux de modifications du code, du développement à la production. Cette visualisation permet d’identifier les goulets d’étranglement, les redondances ou le gaspillage dans le processus. Elle permet aux équipes de visualiser la totalité du cycle de livraison, d’améliorer l’efficacité des flux et de raccourcir les délais.

En cartographiant la chaîne de valeur, les entreprises peuvent prendre des décisions basées sur des données concrètes pour optimiser leurs pipelines CI/CD et les aligner plus précisément sur leurs objectifs métiers.

L’ingénierie de la fiabilité des sites (SRE, Site Reliability Engineering) est une discipline qui réunit des domaines de l’ingénierie logicielle et de l’ingénierie des systèmes pour établir et exécuter des systèmes évolutifs, fiables et efficaces. Initialement mise en place chez Google, l’approche SRE applique les principes DevOps en mettant particulièrement l’accent sur la fiabilité. Les ingénieurs SRE utilisent des outils logiciels pour gérer les systèmes, résoudre les problèmes et automatiser les tâches opérationnelles. Parmi les pratiques principales figurent la définition des objectifs de niveau de service (SLO), les budgets d’erreurs et l’automatisation pour réduire la charge de travail. Le but consiste à établir le juste équilibre entre vitesse de création des versions et fiabilité du système.