GitLab CI Vs. Jenkins : Différences et similitudes [2023]
Exploration du Processus CI/CD : GitLab CI vs Jenkins
Le développement de logiciels est une aventure complexe, débutant par la planification, l'analyse, la conception, et se poursuivant à travers le développement, les tests, le déploiement et la maintenance. Les experts en développement logiciel ont besoin d'une panoplie d'outils pour faciliter cette trajectoire.
Dans le domaine de l'intégration et de la livraison continues (CI/CD), GitLab CI et Jenkins se distinguent comme des solutions majeures. La CI/CD est un ensemble de procédures qui automatisent le processus de développement de logiciels.
Cet article va détailler ce que chaque outil représente, comment chacun fonctionne et mettra en lumière une comparaison de leurs fonctionnalités clés.
Qu'est-ce que GitLab CI ?
GitLab Continuous Integration and Delivery est un instrument DevOps conçu pour automatiser les étapes nécessaires à la création, au test et au déploiement de votre code dans un environnement de production.
GitLab CI est composé de deux volets : l'Intégration Continue (CI) et la Livraison/Déploiement Continu (CD).
L'Intégration Continue est responsable de l'automatisation de tous les processus de construction. Cette fonctionnalité fournit des rétroactions par le biais de revues de code et automatise les tests de sécurité et de qualité. Enfin, elle crée un package de construction prêt à être déployé en production.
La partie Déploiement Continu de GitLab CI gère l'approvisionnement de l'infrastructure, les tickets, les changements d'infrastructure et le contrôle des versions. Le CD propose un environnement de déploiement de code progressif et facilite la vérification et le suivi de tous les changements. Cette fonctionnalité permet aussi d'annuler les changements quand cela s'avère nécessaire.
En combinant ces deux aspects, il est possible d'automatiser l'ensemble du cycle de vie du développement logiciel (SDLC) avec une intervention manuelle minime.
En bref, GitLab CI est employé pour :
- Stocker et administrer le code
- Automatiser le pipeline CI/CD
- Effectuer le suivi des problèmes
- Sécuriser le code
- Faciliter la collaboration
Avantages de l'utilisation de GitLab CI
- Rapidité accrue : Élimination des processus manuels lors de la construction, du test et du déploiement du code.
- Qualité améliorée du code : Identification des bugs et erreurs avant qu'ils n'atteignent la production.
- Sécurité renforcée : GitLab CI intègre des mesures de sécurité telles que l'analyse des vulnérabilités, la gestion des secrets et l'analyse du code.
- Flexibilité : Adaptabilité aux besoins spécifiques de votre équipe et compatibilité avec les principaux langages et frameworks.
- Tests automatisés : Automatisation de l'écriture et de l'exécution des tests grâce à des scripts.
Qu'est-ce que Jenkins ?
Jenkins est un serveur d'automatisation extensible. Cet outil open source permet de gérer et de créer des pipelines d'intégration continue et de livraison continue (CI/CD). C'est un outil de prédilection pour les DevOps et les ingénieurs logiciels, car il contribue à améliorer la qualité, la fiabilité et la rapidité de livraison des logiciels.
Jenkins exécute une série de "tâches" ou d'étapes au sein d'un pipeline. Une tâche est composée de plusieurs étapes qui sont exécutées en séquence. Une étape peut être une construction, un test, un déploiement, ou toute autre activité automatisable dans le cycle de vie du développement logiciel.
Les fonctions de Jenkins peuvent être résumées comme suit :
- Intégration continue
- Livraison continue
- Tests automatisés
- Surveillance et rapports
- Analyse de code
- Planification des tâches
Avantages de l'utilisation de Jenkins
- Évolutivité : Adaptable aussi bien aux petites qu'aux grandes applications.
- Configuration aisée : Processus de configuration simple et soutenu par de nombreuses ressources.
- Communauté étendue : Forte présence depuis presque deux décennies.
- Nombreux plugins : Amélioration des fonctionnalités de Jenkins grâce à une grande variété de plugins.
- Exécution parallèle : Possibilité d'effectuer plusieurs tâches simultanément pour un gain de temps.
Similitudes entre GitLab CI et Jenkins
- Prise en charge de l'intégration continue et de la livraison continue.
- Outils open source.
- Communautés importantes et actives.
- Compatibilité avec divers langages et frameworks.
- Automatisation de diverses tâches du cycle de vie du développement logiciel.
- Vastes écosystèmes de plugins et d'extensions.
GitLab CI vs Jenkins : Une comparaison des fonctionnalités
| Fonctionnalité | GitLab CI | Jenkins |
| Open-source | Oui | Oui |
| Prise en charge linguistique | Multiples langages | Multiples langages |
| Prix | La plupart des fonctionnalités sont disponibles gratuitement. Des plans payants offrent des options supplémentaires. | Outil gratuit. |
| Maturité | Plateforme plus récente, créée en 2014. | Jenkins a été initialement lancé sous le nom de Hudson, puis renommé Jenkins en 2011. |
| Facilité d'utilisation | Facile à prendre en main | Peut être complexe pour les débutants |
GitLab CI vs. Jenkins : Comparaison détaillée
Bien que GitLab et Jenkins partagent des similitudes, des différences notables influencent leur gestion du processus CI/CD. Voici quelques-uns des principaux points de divergence :
Architecture
Jenkins utilise une architecture maître-esclave pour gérer les builds.
- Jenkins planifie les constructions de tâches et les distribue aux esclaves pour l'exécution. Le maître surveille l'état des esclaves, collecte et agrège tous les résultats de construction dans un tableau de bord Web.
- Un esclave Jenkins est un exécutable Java fonctionnant sur une machine distante. Également connu sous le nom d'agent de build, il écoute les requêtes du maître et les exécute. Il est possible d'avoir plus de 100 nœuds et d'ajouter ou de supprimer des esclaves au besoin.
GitLab CI est une partie intégrante de GitLab, une interface web pour la gestion des dépôts, les demandes de fusion et bien plus. GitLab CI a plusieurs éléments clés :
- L'outil GitLab CI/CD pour la gestion des builds.
- Les GitLab Runners, qui exécutent toutes les tâches CI. Ces processus légers peuvent fonctionner sur le cloud ou sur votre propre machine.
- Les configurations de pipeline CI/CD sont définies dans le fichier .gitlab-ci.yml, qui décrit tous les travaux, les étapes et les phases du pipeline.
Plugins
Jenkins propose plus de 1 800 plugins fournis par la communauté. Ces plugins couvrent divers domaines, tels que la construction, le déploiement et l'automatisation des projets. Ils permettent de personnaliser les pipelines CI/CD et d'étendre les capacités de Jenkins.
Les développeurs peuvent créer des plugins personnalisés en s'appuyant sur la documentation complète de Jenkins. Ils peuvent également partager leurs créations via le répertoire de plugins de Jenkins. La communauté active de Jenkins contribue grandement à la création et à l'amélioration des plugins.
GitLab CI permet de se connecter/intégrer avec des services externes pour étendre les fonctionnalités. Sa bibliothèque de plugins/extensions est plus réduite que celle de Jenkins mais elle est en croissance. GitLab CI étant une partie intégrante de GitLab, il offre de nombreuses fonctionnalités natives.
Les utilisateurs ont la possibilité de personnaliser/configurer leurs workflows grâce au fichier .gitlab-ci.yml. Ce fichier permet de spécifier tous les travaux, phases et étapes.
Pipelines
Jenkins permet d'employer à la fois la syntaxe de pipeline déclarative et scriptée. Les deux approches sont accessibles via l'interface utilisateur Web ou via un fichier Jenkins. Cette dernière approche est la plus courante. Les pipelines sont stockés en tant que fichiers Jenkins dans le même dépôt que le code source. Une interface graphique Web intégrée facilite la surveillance et la visualisation des exécutions.
GitLab CI utilise un fichier .gitlab-ci.yml qui définit l'ensemble des pipelines. Ce fichier de configuration, basé sur la syntaxe YML, est stocké à la racine du projet. Le .gitlab-ci.yml est connu pour sa syntaxe simple, avec une série de commandes et de mots-clés prédéfinis pour les tâches CI/CD les plus courantes. GitLab CI s'intègre étroitement avec les autres fonctionnalités de GitLab, comme la gestion du code source, le suivi des problèmes, les revues de code, les demandes de fusion, et bien d'autres.
Comment installer Jenkins
Avant d'installer Jenkins sur votre ordinateur, vous devez disposer d'un environnement d'exécution Java (JRE). Vous pouvez le télécharger sur le site officiel, en choisissant la version adaptée à votre système d'exploitation. Cet exemple utilisera Ubuntu.
Si votre système d'exploitation est différent, consultez notre article d'installation de Jenkins et suivez les étapes décrites.
Pour Ubuntu, suivez ces instructions :
Étape 1 : Assurez-vous que JRE est installé. Exécutez la commande suivante :
java -version
Si JRE est installé, vous devriez voir une sortie similaire à :

La version installée est « 17.0.6 », mais vous pouvez avoir une version supérieure.
Étape 2 : Importez la clé GPG dans votre système à l'aide de cette commande :
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
Étape 3 : Ajoutez le dépôt de logiciels Jenkins avec la commande suivante :
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
Étape 4 : Mettez à jour votre système :
sudo apt update
Étape 5 : Installez Jenkins avec cette commande :
sudo apt install jenkins -y
Étape 6 : Vérifiez si Jenkins est installé à l'aide de la commande :
sudo systemctl status jenkins
Si l'installation s'est bien déroulée, vous verrez une sortie similaire à celle-ci :

Appuyez sur ctrl + z pour quitter et passer à l'étape suivante.
Étape 7 : Autorisez le pare-feu pour Jenkins. Utilisez la commande suivante :
sudo ufw allow 8080
Étape 8 : Vérifiez l'état du pare-feu :
sudo ufw status

Étape 9 : Si le statut est "Inactif", activez-le en utilisant cette commande :
sudo ufw enable
Étape 10 : Ouvrez Jenkins dans le navigateur en saisissant l'adresse suivante :
http://localhost:8080

Étape 11 : Récupérez le "Mot de passe administrateur" en exécutant cette commande :
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Étape 12 : Déverrouillez Jenkins.
Copiez le mot de passe affiché dans le terminal, collez-le dans la boîte de dialogue "Mot de passe administrateur" et cliquez sur "Continuer".

Une nouvelle fenêtre vous demandera d'installer les plugins. Choisissez l'option d'installer les plugins par défaut, si vous n'avez pas de besoin spécifique.
Étape 13 : Créez votre compte et "enregistrez et continuez".

Étape 14 : Configurez l'adresse web et commencez à utiliser Jenkins.

Comment installer GitLab CI
GitLab CI est intégré à GitLab. Pour obtenir GitLab CI, vous devez installer GitLab Runner, l'agent qui exécute les tâches avant de les envoyer à GitLab.
L'exemple suivant utilisera Ubuntu. Si votre système d'exploitation est différent, veuillez consulter la documentation officielle. Pour Ubuntu, voici les étapes à suivre :
Étape 1 : Mettez à jour et configurez votre système :
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
Vous pouvez configurer un service de messagerie pour recevoir des mises à jour, ou ignorer cette étape.
Étape 2 : Ajoutez un référentiel de packages GitLab :
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

Étape 3 : Configurez votre compte GitLab.
Il existe différentes options pour l'hébergement de GitLab. Suivez les instructions en fonction de votre choix.
Étape 4 : Parcourez le nom d'hôte et connectez-vous. Utilisez cette commande dans votre terminal pour obtenir votre mot de passe :
/etc/gitlab/initial_root_password
Optionnel : configurez les préférences de communication pour recevoir les mises à jour des produits et les nouvelles de GitLab.
Limitations de Jenkins
- Jenkins peut s'avérer complexe à configurer pour de grands projets.
- Si mal configuré, il peut être vulnérable aux attaques de sécurité.
- La montée en charge peut s'avérer difficile pour des projets importants.
- Jenkins peut consommer beaucoup de ressources lorsqu'il exécute un grand nombre de builds en simultané.
Limitations de Gitlab CI
- GitLab CI peut être complexe à gérer pour des projets de grande envergure.
- Il est dépendant de GitLab.
- L'évolutivité pose problème pour de grands projets.
- L'écosystème de plugins est moins développé que celui de Jenkins.
L'avis de l'auteur
GitLab CI et Jenkins sont tous deux des outils très utiles dans le cycle de développement logiciel. Je choisirais Jenkins si j'avais besoin d'une plateforme mature, permettant un contrôle complet sur la personnalisation. GitLab CI serait mon choix pour son interface utilisateur et son intégration native avec GitLab.
Vous devriez maintenant être en mesure de distinguer GitLab CI de Jenkins. Bien que tous deux soient conçus pour exécuter des fonctions similaires, leurs caractéristiques et leurs méthodes diffèrent. Le choix entre les deux dépendra de la nature de votre projet, de vos compétences, de vos goûts et de vos préférences.
Vous pouvez également consulter ces plateformes d'hébergement Jenkins.