Qu'est-ce qu'un pipeline de CI/CD ?

Guide ultime des pipelines de CI/CD

En quoi consiste exactement un pipeline d'intégration et de livraison continues ? Et comment en construire un ?

Si vous avez déjà fait des recherches sur l'intégration, la livraison et le déploiement continus (mieux connus sous l'abréviation CI/CD), vous connaissez certainement l'expression « pipeline automatisé » et avez appris comment il joue un rôle central dans l'implémentation de ces pratiques.

L'approche CI/CD est une pratique DevOps qui permet de fournir des applications plus rapidement, sans compromis sur la qualité. Elle implique de nombreux commits, des tests rigoureux de ces mises à jour et la prise en compte réactive des retours. Disposer d'un pipeline de CI/CD automatisé est essentiel à cette méthode de travail.

Qu'est-ce qu'un pipeline de CI/CD ?

Lorsque nous parlons d'un pipeline de CI/CD, nous faisons référence au processus qui fait passer le code de votre environnement de développement par différentes étapes, telles que le test et la préproduction, avant de le livrer aux utilisateurs.

Tout l'intérêt de cette approche réside dans l'exécution régulière de ce processus, plusieurs fois par jour, voire par heure. Il est donc essentiel d'automatiser le pipeline de CI/CD autant que possible. Si une étape se termine correctement, elle doit déclencher la suivante automatiquement. Par contre, si elle échoue, ce retour doit être rapidement communiqué pour résoudre le problème.

L'automatisation de vos pipelines de CI/CD non seulement accélère le processus global de création, de test et de déploiement de logiciels, mais elle garantit également que chaque étape s'exécute de façon cohérente et fiable.

Les étapes d'un pipeline de build

La forme exacte de votre pipeline de CI/CD dépend de votre produit et de votre organisation, mais la plupart des pipelines suivent un modèle général :

  1. Le plus souvent, le processus commence par un commit sur la branche principale (ou celle désignée comme branche de CI), qui déclenche soit un build, soit une série initiale de tests unitaires. Les résultats sont généralement visibles sur un tableau de bord. Le pipeline peut être conçu pour s'arrêter en cas d'erreurs de build ou de test, ce qui vous permet de traiter les problèmes avant de continuer. Une fois un correctif validé, le pipeline redémarre automatiquement depuis le début pour s'assurer que tout fonctionne comme prévu. Sinon, vous pouvez configurer le pipeline pour continuer tout en signalant les échecs à analyser.
  2. L'étape suivante consiste en une série de tests automatisés, avec un retour d'information après chaque test. En général, les tests sont organisés de sorte que les tests les plus rapides soient exécutés en premier pour obtenir un feedback le plus tôt possible. Les tests gourmands en ressources s'exécutent uniquement si toutes les étapes précédentes se sont terminées correctement. Encore une fois, si l'un des tests échoue, vous pouvez arrêter le pipeline et le reprendre depuis le début, ou poursuivre tout en signalant le problème pour investigation.
  3. Une fois les tests d'automatisation terminés, le logiciel est généralement déployé dans une série d'environnements de préproduction. Certains d'entre eux peuvent être utilisés pour approfondir les tests manuels, tandis que d'autres sont destinés à la formation, l'assistance et aux aperçus pour les clients.
  4. La phase finale de l'architecture du pipeline de CI/CD consiste à inclure les modifications dans la version de production. La version peut être déclenchée manuellement (en cas de livraison continue) ou automatiquement (comme pour le déploiement continu).

Nous allons voir plus en détail certaines considérations clés pour chacune de ces étapes.

Bonnes pratiques CI/CD

La construction d'un pipeline de CI/CD ne devrait pas être un exercice passif. Explorez les bonnes pratiques de CI/CD pour votre pipeline.

Indicateurs et branches

La première étape de l'implémentation de l'intégration continue consiste à transférer l'ensemble de votre base de données dans un système de contrôle de version ou VCS (également appelé gestion du contrôle de code source ou SCM), tel que Git, Mercurial ou Perforce. Ensuite, vous devez amener tous les membres de votre équipe à effectuer fréquemment des commits de leurs modifications. Chaque commit sur le processus principal déclenche une exécution du pipeline d'intégration continue : le code est compilé et testé pour vous fournir un retour rapide sur les dernières modifications.

Bien que les commits fréquents constituent une pratique importante dans le pipeline de CI/CD, si vous travaillez sur une fonctionnalité plus importante qui prend plusieurs jours ou semaines à terminer, envoyer périodiquement des commits pendant ce processus peut paraître contre-productif.

D'une part, la réalisation d'un push de votre modification dans le pipeline par paliers réguliers permet de disposer de feedbacks rapides. Cela permet également de réduire la probabilité de conflits de fusion complexes par rapport à l'attente de la fin de la fonctionnalité.

D'un autre côté, pousser des fonctionnalités incomplètes dans le pipeline peut ne pas être idéal. Partager un travail partiel avec les autres utilisateurs, y compris dans les environnements de préproduction, peut ne pas être souhaitable non plus.

Les indicateurs de fonctionnalités et les branches de fonctionnalité permettent de contourner ce problème. Les indicateurs de fonctionnalités vous permettent de spécifier les environnements dans lesquels vous souhaitez que votre code soit visible. Vos modifications sont toujours enregistrées dans la branche principale et visibles par votre équipe, mais c'est vous qui décidez quand la fonctionnalité devient disponible en préproduction et en production.

Les branches de fonctionnalité vous permettent de développer votre fonctionnalité dans une branche distincte, sans perdre les avantages du build et des tests automatisés. En déclenchant le pipeline de CI/CD à chaque commit sur une branche de fonctionnalité (comme pour un commit sur la branche principale), vous obtenez des retours rapides sur votre projet.

Créer et tester

Après avoir déclenché une instance de votre pipeline avec un commit, les étapes suivantes sont le build et les tests. Si vous avez des tests unitaires automatisés, ils sont généralement exécutés avant la création d'un build avec le linting et les vérifications d'analyse statique.

L'outil de build que vous utilisez (comme Ant ou Maven) et les détails des étapes de build dépendent du langage et du framework dans lesquels vous travaillez. En exécutant le build automatisé sur un serveur de build dédié, vous pouvez éviter les problèmes en aval causés par des dépendances manquantes : le problème classique du « ça marche sur mon PC ».

L'étape de build produit les artefacts de l'application, qui peuvent inclure des installateurs, des fichiers binaires ou des conteneurs. Ces artefacts sont ensuite déployés dans des environnements de test et intégrés avec d'autres parties du système pour exécuter des tests automatisés de niveau supérieur : tests d'intégration, tests de composants et tests de bout en bout, ainsi que des tests non fonctionnels, tels que l'analyse des performances et de la sécurité.

Ces tests peuvent être exécutés en parallèle pour accélérer le processus et vous fournir un retour d'information plus rapide.

Tests automatisés pour CI/CD

Découvrez pourquoi les tests sont si importants pour le processus de CI/CD et les types de test utilisés.

Conteneurs et VMs

Pour que les résultats de vos tests automatisés soient fiables, vous devez vous assurer qu'ils s'exécutent de manière cohérente.

Idéalement, vos environnements de test doivent être configurés de manière à être aussi similaires que possible à l'environnement de production, et ils doivent être réinitialisés entre les tests pour éviter que les incohérences environnementales ne perturbent les résultats de vos tests.

Les machines virtuelles (VM) sont depuis longtemps un choix populaire pour l'exécution des environnements de test, car vous pouvez programmer l'environnement pour qu'il se réinitialise à chaque nouveau build.

Cependant, arrêter et lancer de nouvelles machines virtuelles prend du temps, et vos scripts doivent inclure une configuration pour chaque environnement virtuel afin de fournir toutes les dépendances nécessaires à l'exécution du logiciel. Lorsque de nouvelles dépendances sont ajoutées, les scripts d'environnement doivent être mis à jour. Attention à ne pas oublier ce point, car cela peut empêcher l'exécution du build.

Vous pouvez éviter ces problèmes en intégrant votre code dans un conteneur lors de l'étape initiale de build. Un conteneur comprend toutes les dépendances dont le logiciel a besoin pour fonctionner, ce qui lui confère une grande portabilité et facilite son déploiement dans différents environnements.

Si vous hébergez vos pipelines de CI/CD sur votre propre infrastructure, des machines virtuelles seront toujours nécessaires pour y déployer les conteneurs, mais la préparation de l'environnement de test nécessite moins d'efforts. Si vous exécutez votre pipeline dans le cloud, vous pouvez tirer parti de l'infogérance en utilisant des conteneurs et externaliser la gestion de l'infrastructure en la confiant à votre fournisseur cloud.

Environnements de pré-production

Le nombre d'environnements de test et de préproduction dans l'architecture de votre pipeline dépend de votre produit et des exigences des parties prenantes de votre organisation. Par exemple, il peut s'agir de tests exploratoires, d'analyses de sécurité, de recherches relatives aux utilisateurs, de démonstrations de vente, d'environnements de formation et de sandboxes permettant au personnel chargé de l'assistance de reproduire les problèmes des clients.

L'automatisation de la création et du déploiement dans ces environnements est plus efficace que leur actualisation manuelle. Vous pouvez également configurer différents déclencheurs de pipeline pour différents environnements.

Par exemple, alors que vos environnements de test peuvent être mis à jour à chaque build, vous pouvez décider d'actualiser les environnements intermédiaires moins fréquemment (éventuellement une fois par jour ou par semaine avec le dernier build réussi).

Déployer

Lorsque vos modifications de code ont réussi toutes les étapes précédentes du pipeline, elles sont prêtes pour la mise en production. Cette étape finale peut être manuelle ou automatique.

La publication manuelle (livraison continue) est utile si :

  • Vous souhaitez maîtriser la date de disponibilité des nouvelles fonctionnalités.
  • Votre processus de déploiement prévoit des périodes d'inactivité pour vos utilisateurs.
  • Les utilisateurs doivent installer votre produit et vous souhaitez regrouper les modifications conformément à un échéancier de publication.

Avec le déploiement continu, la publication est automatique. Les modifications qui satisfont toutes les étapes précédentes sont mises en production. Pour les grandes équipes qui réalisent souvent des commits, cela peut se traduire par plusieurs dizaines de déploiements quotidiens de mises à jour, un exploit impossible à réaliser en l'absence de pipeline automatisé.

Outils de CI/CD

Les outils dédiés jouent un rôle important dans la création d'un processus de CI/CD, mais cela ne veut pas dire que vous ne pouvez pas commencer à travailler sans eux. Vous pouvez commencer par écrire des tests automatisés et créer des scripts d'exécution automatique, sans passer par une plateforme de CI/CD.

Cela peut ensuite évoluer vers un pipeline d'intégration continue avec des travaux de build et de test suivant un échéancier.

La sélection du bon outil de CI/CD en fonction de vos besoins permet de déployer votre stratégie de CI/CD plus rapidement, de l'ajout de pipelines à une gestion et un dimensionnement plus efficace de l'infrastructure de build.

Afin de vous aider à choisir l'outil de CI/CD qui vous convient le mieux, nous avons compilé une liste de points à prendre en compte :

  • Options d'intégration : votre outil de CI/CD doit s'intégrer avec votre système de contrôle de version, vos outils de build, les frameworks de test et les gestionnaires de packages de façon à pouvoir coordonner chacune des étapes de vos pipelines de CI/CD. Il doit également s'intégrer avec les plateformes de messagerie de votre équipe, les outils de suivi de tickets et les IDE, afin d'obtenir un feedback lorsque nécessaire.
  • Prise en charge de la pile technologique : tenez compte non seulement des langages de programmation, des plateformes et des frameworks que vous utilisez actuellement, mais aussi de l'évolution prévisible de vos besoins. Les outils en phase de développement actif sont les plus susceptibles de prendre en charge les nouvelles technologies.
  • Interfaces pour tous : offrir un vrai choix entre les interfaces graphiques, applicatives et de ligne de commande est important lorsque de nombreuses personnes interviennent dans le processus de CI/CD. La prise en charge de la configuration en tant que code est vitale si vous adoptez une approche véritablement DevOps.
  • Personnalisation : il n'y a pas de pipeline de CI/CD standard, par conséquent choisissez un outil flexible permettant de créer un processus automatisé correspondant à vos besoins.
  • Options d'infrastructure : il peut être préférable d'héberger votre pipeline sur des serveurs locaux pour des raisons de sécurité ou de conformité. Vous avez peut-être déjà fait migrer tous vos systèmes sur le cloud ou prévoyez de le faire. Quelles que soient vos préférences, assurez-vous que vos outils sont adaptés aussi bien à vos besoins actuels que prévisibles.
  • Évolutivité et performances : l'ajout de pipelines pour vos projets et leur exécution plus fréquente risquent de faire de votre infrastructure un facteur limitant. Choisir un outil de CI/CD capable d'évoluer et d'optimiser la gestion de vos machines de build et de test permet de gagner du temps et de réduire les efforts.
  • Coût : en complément des frais de licence, tenez compte du coût de l'assistance et des options d'infrastructure basée sur le cloud.

Comment choisir un outil de CI/CD

Cet article présente des recommandations générales pour le choix d'une solution de CI/CD adaptée et explique le rôle que joue TeamCity dans ce cadre.

Qu'est-ce que le CI/CD en DevOps ?

L'approche CI/CD fait partie d'une pratique plus générale appelée DevOps. Le DevOps crée une passerelle entre le développement (création de produits et services) et les opérations (publication et gestion de ces logiciels) et peut être appréhendé aussi bien comme une méthode de travail qu'un état d'esprit. Il repose sur les principes Agile pour aider l'entreprise en général, et les équipes de développement en particulier, à livrer plus rapidement des logiciels de qualité.

Lors de l'implémentation de vos pipelines de CI/CD, comprendre ce que signifie DevOps facilite les premières étapes. Il est utile de conserver les points suivants à l'esprit :

  • Le DevOps souligne l'importance de la fédération autour d'un objectif de l'ensemble des personnes intervenant dans la création, la publication et la maintenance des logiciels, afin de produire des logiciels qui répondent aux besoins des utilisateurs.
  • L'approche DevOps repose sur le concept de déplacement à gauche. Cela signifie que les problèmes sont identifiés aussi tôt que possible en amont, de façon à ne pas cumuler les retards en aval. C'est pourquoi les pipelines de CI/CD se concentrent sur des boucles de feedback régulières et rapides, afin de faciliter le déplacement vers la gauche.
  • L'apport des compétences et de l'expertise des développeurs aux opérations permet d'automatiser des tâches, telles que la maintenance des infrastructures et l'actualisation des environnements.
  • En exposant les équipes de développement au travail normalement géré par les équipes opérationnelles, les développeurs bénéficient d'une meilleure visibilité de l'ensemble du processus, ce qui leur permet d'anticiper les bugs et le feedback des utilisateurs.

Les pipelines de CI/CD permettent d'automatiser ce qui se produit depuis le commit des modifications jusqu'à la publication d'une nouvelle version de votre logiciel. L'automatisation de ces tâches accélère l'exécution et les feedbacks, ce qui permet d'apporter les corrections nécessaires plus tôt et de gagner ainsi un temps et des ressources précieux.

Qu'est-ce qu'un pipeline de CI/CD

L'approche CI/CD est une pratique DevOps qui utilise l'automatisation pour fournir des retours rapides à chaque étape du cycle de vie de développement logiciel. L'identification des problèmes introduits par vos dernières modifications de code rend le développement logiciel plus efficace. En opérant un déplacement vers la gauche (en avançant les interactions pour obtenir un feedback plus rapidement), les problèmes sont identifiés plus rapidement et la création d'un pipeline automatisé met ces techniques en œuvre.

Lorsque vous concevez votre propre processus de CI/CD, il est intéressant de le développer par étapes, en commençant par l'intégration continue. Les étapes exactes du pipeline et la logique qui détermine à quel moment chaque étape est déclenchée dépendent de votre produit et de votre organisation.

Choisir une plateforme de CI/CD qui vous offre la souplesse nécessaire pour configurer votre pipeline en fonction de vos besoins, tout en étant facile à gérer, vous aidera à mettre en place un processus de publication fiable et à améliorer la qualité de vos logiciels.

Comment TeamCity peut vous aider

TeamCity est une solution de CI/CD conçue pour une méthode de travail DevOps. Avec la prise en charge de tous les systèmes de contrôle de version, une large gamme d'outils de gestion de builds, de test et de gestion de package, ainsi que des plateformes populaires de gestion des machines virtuelles et des conteneurs, TeamCity vous aide à transformer vos processus existants en pipelines de CI/CD automatisés.

Des options de déclenchement flexible et un éditeur de pipeline visuel facilite la configuration des pipelines quel que soit le workflow. Les configurations sont stockées automatiquement sous forme de code, ce qui vous donne la liberté de bâtir votre logique dans l'interface utilisateur graphique pendant l'exploitation de l'ensemble des avantages de la configuration en tant que code.

Grâce à la conception haute performances de TeamCity, un serveur de build unique permet de gérer des milliers de projets. Les options de déploiement sur site et cloud natives vous donnent la flexibilité indispensable pour exécuter vos pipelines où vous le souhaitez et évoluer à la demande. La parallélisation des tests et les résultats en temps réel raccourcissent encore plus les boucles de feedback, afin d'identifier les problèmes plus tôt et d'offrir une expérience de développement plus productive.

Vous avez d'autres questions ? Plus d'informations dans notre section FAQ.