Introduction Maîtriser l'automatisation avec le guide complet GitLab CI/CD

Démarrez avec l'Intégration et Déploiement Continus. Configurez vos pipelines GitLab via le fichier .gitlab-ci.yml.

Maîtriser GitLab CI/CD: Introduction

L'Intégration et le Déploiement Continus (CI/CD)

Dans le cycle de développement moderne, l'efficacité repose sur deux piliers indissociables : le CI (Continuous Integration) et le CD (Continuous Deployment). GitLab CI automatise la gestion et les tests de vos projets à chaque envoi de code, tandis que le CD prend le relais pour placer automatiquement ces changements validés en production.

Imaginez une chaîne de montage automobile ultra-moderne. Le CI est le scanner laser qui vérifie chaque soudure en temps réel. Le CD est le bras robotisé qui place la voiture finie sur le camion de livraison dès qu'elle est validée. Grâce à ce système, vous détectez les erreurs immédiatement et déployez sur la branche main en toute sérénité.

Le fichier .gitlab-ci.yml : Le Chef d'Orchestre

Qu'est-ce que ce fichier et pourquoi est-il vital ?

Le fichier .gitlab-ci.yml est le cerveau de votre automatisation. C'est un fichier texte au format YAML que vous devez impérativement placer à la racine de votre dépôt. Sans lui, GitLab n'est qu'un simple espace de stockage, avec lui, il devient une usine logicielle intelligente.

C'est une recette de cuisine technique : dès que vous effectuez un push, GitLab lit ce fichier et délègue les instructions aux GitLab Runners. Il permet de standardiser vos méthodes de travail : peu importe l'ordinateur du développeur, le code sera toujours testé et déployé de la même manière.

Flux de travail CI avec GitLab

"Visualisation du flux de travail CI avec GitLab"

Anatomie du pipeline : Stages et Jobs

Le fonctionnement de votre pipeline CI/CD repose sur une hiérarchie stricte définie dans le fichier :

  • Les Stages (Étapes) : Ils définissent la chronologie (ex: d'abord on build, ensuite on teste). Un stage ne démarre que si le précédent est réussi.
  • Les Jobs (Tâches) : Ce sont les scripts réels (ex: npm test). Plusieurs jobs peuvent tourner en parallèle au sein d'un même stage pour gagner du temps.

Implémentation pratique du pipeline

Voici une configuration YAML complète pour une application Node.js :

stages:
  - build
  - test
  - deploy

job_compilation:
  stage: build
  image: node:22-alpine
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/

job_tests_unitaires:
  stage: test
  image: node:22-alpine
  script:
    - npm test

job_deploiement_prod:
  stage: deploy
  image: alpine:latest
  script:
    - echo "Déploiement sur le serveur de production..."
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

Le conseil du Pro

Le format YAML est extrêmement sensible aux indentations. Utilisez l'outil CI Lint intégré à GitLab (dans le menu CI/CD > Editor) pour valider votre syntaxe avant de commiter.

Les Stages : La chronologie de votre projet

La directive stages est la colonne vertébrale de votre automatisation. Elle définit l'ordre chronologique dans lequel vos tâches vont s'exécuter. Dans votre exemple, nous avons trois étapes clés : build (construction), test et deploy (déploiement).

Imaginez une chaîne de montage automobile. Les stages garantissent que l'on ne peint pas la voiture (déploiement) avant d'avoir vérifié si le moteur fonctionne (test) et on ne teste pas le moteur avant de l'avoir assemblé (build). Si une étape échoue, GitLab arrête tout immédiatement pour protéger votre production.

Le Job : L'ouvrier spécialisé

Un job est une unité de travail concrète. Dans votre code, job_compilation ou job_tests_unitaires sont des jobs. Chaque job doit être rattaché à un stage.

  • image : C'est l'environnement de travail (le conteneur Docker). Utiliser node:22-alpine garantit que votre code s'exécute avec la version exacte de Node.js dont il a besoin.
  • script : C'est le cœur de l'action. Ce sont les commandes terminal que le Runner va taper à votre place. La commande npm ci installe les dépendances de manière rapide et ultra-fiable.

Les Artifacts : Transmettre les résultats

Par défaut, chaque job démarre dans un environnement totalement vide. Lorsqu'un job de compilation crée un dossier dist/, ce dossier disparaît dès que le job est fini.

Les artifacts permettent de "sauver" des fichiers pour les transmettre aux jobs suivants. Ici, le dossier de compilation est conservé pour que le job de déploiement puisse l'utiliser plus tard.

Les Rules : L'intelligence conditionnelle

Le mot-clé rules apporte une intelligence de décision à votre pipeline. Vous ne voulez pas déployer sur votre serveur de production à chaque fois qu'un développeur fait un test sur une petite branche isolée.

Dans votre code, la règle utilise des Variables CI/CD prédéfinies :

if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

Cela signifie : "N'exécute ce job de déploiement QUE si le code est poussé sur la branche par défaut (généralement main)". C'est votre sécurité anti-erreur humaine.

Information

Ne vous inquiétez pas si certains concepts vous paraissent encore flous : ce n'est qu'une première introduction. Nous reviendrons sur chacun de ces points bien plus en profondeur dans les chapitres suivants.

Exécution du pipeline

Voici ce que verra un développeur dans sa console GitLab lors du lancement de ce pipeline après un push sur la branche principale.

Sortie terminal - Statut global :

Pipeline #458712 started for branch 'main'

[Stage: build]
- job_compilation: RUNNING...
  $ npm ci
  $ npm run build
  Uploading artifacts... dist/ (2.4MB)
  Job succeeded

[Stage: test]
- job_tests_unitaires: RUNNING...
  $ npm test
  7 runs, 15 assertions, 0 failures
  Job succeeded

[Stage: deploy]
- job_deploiement_prod: RUNNING...
  $ echo "Déploiement sur le serveur de production..."
  Job succeeded

Pipeline succeeded in 2m 54s

Conclusion

Le couple CI/CD et son fichier .gitlab-ci.yml transforment radicalement votre quotidien de développeur. Vous passez d'un mode manuel stressant à un flux automatisé, fiable et rapide.

Cependant, pour que votre pipeline puisse interagir avec vos serveurs en toute sécurité, il ne faut jamais écrire vos mots de passe en clair dans ce fichier. Dans le prochain chapitre, nous allons apprendre à utiliser les Variables CI/CD pour protéger vos secrets.

Espace commentaire

Écrire un commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

28 commentaires

ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Assure-toi que tu n'as pas de faute de frappe sur le nom de la variable. Vérifie aussi que tu es bien sur une version récente de GitLab, les variables CI_COMMIT_BRANCH sont standard maintenant.

20/05/2026 à 14:02
tgautier
Membre
Avatar de tgautier
tgautier
Membre

J'ai une erreur sur le if: $CI_COMMIT_BRANCH. Il ne reconnaît pas la variable.

20/05/2026 à 07:29
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie si ton runner doit télécharger l'image Docker à chaque fois. Utilise un cache local ou garde une image de base plus légère.

20/05/2026 à 01:26

Le pipeline est super lent à démarrer. Une astuce ?

19/05/2026 à 20:07
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Non, les artifacts c'est pour les fichiers. Pour les variables, utilise les dotenv reports ou les variables globales du projet.

19/05/2026 à 14:25

Est-ce qu'on peut passer des variables d'un job à l'autre via les artifacts justement ?

19/05/2026 à 06:48
bgrenier
Membre
Avatar de bgrenier
bgrenier
Membre

Merci pour l'explication sur les artifacts, ça m'a sauvé la vie.

19/05/2026 à 01:22
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Ça se règle au niveau du Runner, pas dans le fichier YAML. Regarde la configuration concurrent dans le fichier config.toml du runner.

18/05/2026 à 19:59
ladam
Membre
Avatar de ladam
ladam
Membre

Est-ce que je peux limiter le nombre de jobs qui tournent en parallèle ?

18/05/2026 à 14:52
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie que tes jobs font bien référence à des stages définis dans la liste globale stages: au début du fichier.

18/05/2026 à 08:21

J'ai un warning sur le stage. Il me dit que le nom n'est pas reconnu.

18/05/2026 à 01:00
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, mais c'est une très mauvaise pratique. Si tu insistes, ajoute allow_failure: true dans ton job de test.

17/05/2026 à 18:15
noemi38
Membre Actif
Avatar de noemi38
noemi38
Membre Actif

Sympa le tuto. Mais si mon job de test plante, je veux quand même que le déploiement se fasse. C'est possible ?

17/05/2026 à 13:41
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Ajoute simplement une commande before_script dans ton job pour installer les paquets nécessaires :

before_script:
  - apk add --no-cache git curl
17/05/2026 à 06:31

Comment je fais pour installer des dépendances système comme git ou curl dans le container alpine ?

17/05/2026 à 01:38
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Utilise le CI Lint dans le menu CI/CD de GitLab comme indiqué dans l'article. C'est radical pour trouver les erreurs de syntaxe invisibles.

16/05/2026 à 18:10
nrocher
Membre Actif
Avatar de nrocher
nrocher
Membre Actif

J'ai une erreur yaml invalid. Pourtant j'ai copié-collé l'exemple. Help.

16/05/2026 à 11:57
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, dans l'interface GitLab, va dans Build > Jobs, clique sur le job en cours. Tu verras le flux défiler.

16/05/2026 à 07:29

Y'a un moyen de voir les logs en temps réel ?

16/05/2026 à 01:16
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

C'est probablement un problème de DNS sur ton runner ou un accès restreint au registre Docker. Teste un docker pull node:22-alpine directement sur la machine qui héberge le runner pour voir si ça sort.

15/05/2026 à 19:38
alex20
Membre Actif
Avatar de alex20
alex20
Membre Actif

Même problème ici. On dirait qu'il n'arrive pas à pull l'image Docker.

15/05/2026 à 14:41

Le runner est bloqué sur le stage build. Il affiche image: node:22-alpine mais ça tourne dans le vide.

15/05/2026 à 07:25
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Faut modifier la condition dans rules. Remplace $CI_DEFAULT_BRANCH par le nom de ta branche cible ou utilise une regex :

rules:
  - if: $CI_COMMIT_BRANCH =~ /^feature\/.*/
15/05/2026 à 03:22

Comment je peux forcer le déploiement sur une branche différente de main pour faire des tests ?

14/05/2026 à 20:57
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie l'indentation dans ton .gitlab-ci.yml. Si le bloc artifacts est mal aligné sous job_compilation, GitLab l'ignore purement et simplement. C'est du YAML, la moindre espace compte.

14/05/2026 à 14:17

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire