DevOps : Comparaison des principaux outils d’intégration CI/CD 

Sep 25, 2023 | 0 commentaires

Articles de Blog

Dans le monde de l’informatique moderne, le développement logiciel a vu son cycle de mise en production passer de plusieurs mois à quelques jours, voire parfois quelques heures, nécessitant une complète refonte de ses mécanismes d’intégration afin de garantir un minimum de qualité. Ce bouleversement a donné naissance à un nouveau métier, le DevOps, qui vise à mettre en place des outils et des méthodologies améliorant la collaboration entre les équipes de développement et d’exploitation grâce à des compétences techniques pointues. L’objectif ultime du DevOps est de livrer des logiciels de manière plus rapide et plus fiable grâce à une automatisation et une orchestration avancée d’un ensemble de tâches.

L’une des pierres angulaires de la pratique DevOps est l’intégration continue (CI) et le déploiement continu (CD), qui automatisent et rationalisent le processus de livraison des applications. Dans cet article, nous explorerons certains outils d’intégration CI/CD disponibles en mettant l’accent sur leurs points forts, donnant ainsi aux entreprises quelques clés pour sélectionner l’outil qui leur convient le mieux.

Qu’est-ce que l’intégration continue et le déploiement continu ? 

L’intégration continue (CI) représente une étape cruciale de la méthodologie DevOps, impliquant l’automatisation avancée des processus de développement logiciel. Lorsqu’un développeur fusionne son code dans un référentiel partagé (GIT, SVN ou Mercurial), il déclenche à travers un orchestrateur tel que Jenkins, Travis CI ou GitLab tout un ensemble d’actions. Ces outils d’orchestration vont automatiquement déclencher la compilation du code, exécuter des tests unitaires, réaliser une analyse de qualité, et enfin produire le livrable.

    Exemple d'un cycle CI classique

    Exemple d’un cycle CI classique 


    Afin de configurer et maintenir cette mécanique d’automatisation, il est nécessaire de mettre en place une (voire plusieurs) configuration de build. L’écriture de ces scripts sera réalisée en fonction des technologies de développement utilisées. Chacune de ces étapes est dépendante des autres ; par exemple, si la phase de compilation échoue, le cycle s’arrête, ne passant pas par les phases 3, 4 et 5.

    Le déploiement continu (CD) représente la suite du cycle CI. Il va se charger d’automatiser toute la mécanique de déploiement des applications dans des environnements variés, passant de celui de test à la production, incluant souvent la pré-exploitation. Pour cette phase, il est capital d’avoir de solides compétences techniques en matière de gestion d’infrastructures et d’orchestration de conteneurs. En association, des outils comme Kubernetes, Ansible et Terraform sont couramment utilisés pour piloter et automatiser cette partie. Les compétences techniques associées comprennent la création de fichiers de configuration pour déployer des applications dans des conteneurs, la mise en place d’une politique de gestion de la scalabilité, une stratégie de gestion des versions pour garantir la cohérence des déploiements en production, et une homogénéité dans la mise en place des environnements.

    Exemple d'un cycle DC classique

    Exemple d’un cycle DC classique 

      En somme, le CI/CD sont des piliers de la méthodologie DevOps. Les professionnels qualifiés sont capables de mettre en place ces processus complexes de manière efficace, garantissant ainsi une qualité constante du code, une livraison plus rapide des fonctionnalités et une réduction des risques par rapport à un déploiement manuel.

       

      Les principaux outils d’intégration CI/CD 

      Il existe une pléthore d’outils d’intégration CI/CD disponibles sur le marché, chacun ayant ses propres caractéristiques et avantages. En voici quelques-uns :

       

      Jenkins (enfant de Hudson) 

      Historiquement, Jenkins fait partie des premiers outils d’intégration CI/CD et est encore assez répandu. Il offre une grande flexibilité grâce à sa large gamme de plugins et à sa capacité à s’intégrer avec de nombreux outils. Jenkins permet de configurer des pipelines d’intégration et de déploiement à l’aide d’une interface web en mode clic ou plus sérieusement via des scripts (Jenkinsfile).
       

      Exemple de l'interface web de création d'un Pipeline Jenkins

      Exemple de l’interface web de création d’un Pipeline Jenkins 

      Jenkins est gratuit et open source, c’est une application web Java qui peut être déployée dans tous les environnements, y compris dans un conteneur Docker. Il peut gérer tous types de projets, du projet classique Java en passant par des projets Cobol ou .Net. Du côté de la sécurité, il est possible de créer des coffres-forts où stocker des informations que seuls les administrateurs de l’outil pourront modifier. Il n’y a pas vraiment de limite à ce que Jenkins peut faire, cependant, son interface est assez lourde en termes d’utilisation. Certains plugins, souvent indispensables, peuvent ne plus être maintenus, rendant son utilisation à long terme problématique. 

      Exemple d'historique de lancement d'un CI dans Jenkins

      Exemple d’historique de lancement d’un CI dans Jenkins 

      GitLab CI/CD 

      Intégré directement à la plateforme de gestion de code GitLab, GitLab CI/CD facilite la configuration des pipelines d’intégration et de déploiement.

      Reconnu comme le leader des outils DevOps en 2023 par le Magic Quadrant, il permet aux équipes de définir des étapes spécifiques en utilisant un fichier de configuration défini dans le référentiel (.gitlab-ci.yml).

      Comme on peut s’en douter, le langage utilisé par ce script est le YAML. Son écriture peut demander beaucoup de temps, entre 1 et 5 jours ouvrables selon les projets et le nombre d’étapes désirées.

      Exemple de fichier .gitlab-ci.yml

      Exemple de fichier .gitlab-ci.yml 

      Tout comme ses concurrents, il est possible de créer des coffres-forts où stocker des informations que seuls les administrateurs de l’outil pourront modifier. GitLab a un périmètre d’utilisation et d’action plus large que Jenkins, son cycle de maintenance est aussi beaucoup plus rapide et fiable.

      Contrairement à Jenkins, GitLab est un logiciel payant (il existe tout de même une version gratuite limitée). On peut l’installer dans son SI (ou dans un conteneur), mais son utilisation classique se fait le plus souvent via un abonnement directement sur https://gitlab.com. Le prix varie en fonction du nombre de collaborateurs, mais aussi du temps pris par le lancement des cycles de CI/CD. Il est donc important d’optimiser ses cycles ici afin de ne pas payer plus que nécessaire.

      Exemple de monitoring de pipeline dans GitLab

      Exemple de monitoring de pipeline dans GitLab 

      Travis CI 

      Travis CI est un outil d’intégration CI/CD qui se concentre sur la simplicité et la facilité d’utilisation. Autrefois open source, il est aujourd’hui payant et a été particulièrement populaire pour les projets liés à la plateforme GitHub. Les configurations de pipeline sont définies dans un fichier .travis.yml dans le référentiel.

      Son utilisation et son fonctionnement sont assez proches de Jenkins, avec une interface beaucoup plus fluide et conviviale. Son approche payante lui permet aussi d’assurer un meilleur suivi dans le temps. L’écriture du fichier en YAML est très proche de la syntaxe utilisée par GitLab. 

      CircleCI 

      CircleCI est une plateforme d’intégration CI/CD payante qui offre une configuration simplifiée via un fichier de configuration appelé .circleci/config.yml. Elle prend en charge l’intégration avec plusieurs services cloud et offre des options d’exécution parallèle pour accélérer les processus.

      La création d’un pipeline sur CircleCI implique la définition des étapes clés telles que la compilation, les tests, le déploiement, et la gestion des dépendances dans le fichier .circleci/config.yml. CircleCI offre également des fonctionnalités avancées, notamment l’intégration transparente avec plusieurs services cloud tels qu’AWS, Google Cloud, et Azure, pour le déploiement et la gestion des infrastructures.

       

      TeamCity 

      TeamCity, développé par l’éditeur JetBrains, offre une solution d’intégration CI/CD puissante avec une interface utilisateur conviviale. Il prend en charge la création de pipelines complexes et offre une intégration transparente avec les outils JetBrains, notamment IntelliJ et PhpStorm, pour citer les plus connus.

      Screenshot de TeamCity (source https://www.jetbrains.com/fr-fr/teamcity/)

      Screenshot de TeamCity (source https://www.jetbrains.com/fr-fr/teamcity/) 

      Il existe beaucoup d’autres solutions dont nous n’avons pas parlé ici, telles qu’Azure DevOps, Bitbucket CI/CD (géré par Atlassian, la société éditant Jira), ou même GitHub Actions. Cette liste d’outils change chaque année, n’hésitez pas à remettre en question vos choix d’outils en fonction des évolutions de votre SI.

       

      Critères de choix 

      Le choix d’un outil d’intégration CI/CD dépend d’un grand nombre de critères, dont les plus classiques sont :

      • Le budget : faut-il payer par utilisateur, projet, temps d’utilisation, forfait annuel, etc.
      • Les types de projets : Java, .NET, Angular, Cobol, etc.
      • Les besoins : faire des cycles complets, partiels, côté développement, côté production, etc.
      • L’infrastructure actuelle : souhaitez-vous tout en interne, tout dans le cloud, avec des conteneurs, etc.
      • Les compétences de vos équipes actuelles : débutantes, intermédiaires, expertes, etc.

      D’autres points à prendre en compte sont les suivants :

      • Complexité de configuration : Il est essentiel de considérer la complexité de la configuration requise par chaque outil. Certains, comme Travis CI, sont connus pour leur simplicité, tandis que d’autres, comme Jenkins, offrent plus de flexibilité dans les pipelines mais présentent une plus grande complexité de configuration.
      • Intégration avec d’autres outils : Si votre équipe utilise déjà des outils spécifiques pour la gestion de projets, la surveillance, le stockage des artefacts, etc., assurez-vous que l’outil CI/CD que vous choisissez s’intègre facilement avec ces outils. Les compétences techniques ici incluent la configuration d’intégrations et la gestion des API.
      • Évolutivité : Pensez à l’évolutivité de votre projet et de votre équipe. L’outil doit être capable de s’adapter à la croissance du projet. Cela peut impliquer la gestion de clusters d’agents (par exemple, dans Jenkins) ou la planification de ressources dans le cloud (comme dans CircleCI ou AWS CodePipeline).
      • Facilité d’utilisation : Si votre équipe est nouvelle dans le domaine DevOps, la facilité d’utilisation devient cruciale. Des outils comme GitLab CI/CD sont souvent considérés comme plus conviviaux pour les débutants. Cependant, la maîtrise des concepts fondamentaux du CI/CD reste essentielle, quelle que soit l’interface.
      • Coût : Les modèles de tarification varient considérablement. Certains outils proposent des options gratuites, tandis que d’autres nécessitent des abonnements payants. Comprenez les coûts associés à l’utilisation de chaque outil, en tenant compte du nombre de builds, du stockage des artefacts et des fonctionnalités premium. Les compétences ici concernent la gestion budgétaire et l’évaluation des coûts d’exploitation.

       

      En conclusion, le choix d’un outil d’intégration CI/CD dépend de multiples facteurs, tous importants et spécifiques à votre entreprise. Les compétences techniques varient en fonction de l’outil choisi, et même en fonction de sa version, mais quel que soit votre choix, un grand nombre de fondamentaux demeurent importants, tels que la maîtrise :

      • des configurations de pipeline,
      • de la gestion des ressources,
      • de la sécurisation des accès,
      • du monitoring.

      0 commentaires

      Soumettre un commentaire

      Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *