
Vous connaissez maintenant les concepts fondamentaux : pipeline, stages, jobs, runners. Il est temps de passer à la pratique ! Le fichier .gitlab-ci.yml décrit ce que GitLab doit automatiser. Ce guide vous apprend à le structurer méthodiquement : comment découper votre workflow en stages, définir des jobs, et écrire les scripts qui seront exécutés.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »À la fin de ce module, vous saurez :
- Structurer un fichier
.gitlab-ci.yml: la hiérarchie stages → jobs → script - Définir des stages : organiser les grandes étapes de votre pipeline
- Créer des jobs : configurer les tâches avec les bonnes propriétés
- Écrire des scripts : les commandes exécutées par chaque job
- Spécifier une image Docker : choisir l’environnement d’exécution
- Utiliser les variables : configurer vos jobs dynamiquement
- Valider votre fichier : éviter les erreurs de syntaxe
Prérequis
Section intitulée « Prérequis »Avant de continuer, assurez-vous de maîtriser :
La logique de construction
Section intitulée « La logique de construction »Avant d’écrire du YAML, posez-vous ces questions :
- Quelles sont les grandes étapes de mon workflow ? → Ce seront vos stages
- Quelles tâches dois-je accomplir à chaque étape ? → Ce seront vos jobs
- Quelles commandes chaque tâche doit-elle exécuter ? → Ce sera le script
Exemple de raisonnement pour un projet web :
| Question | Réponse | Élément YAML |
|---|---|---|
| Grandes étapes ? | Compiler, tester, déployer | stages: [build, test, deploy] |
| Tâches du test ? | Tests unitaires, linting | 2 jobs dans le stage test |
| Commandes du lint ? | npm run lint | script: [npm run lint] |
Structure minimale du fichier
Section intitulée « Structure minimale du fichier »Un fichier .gitlab-ci.yml valide contient au minimum :
# 1. Déclarer les stages (optionnel mais recommandé)stages: - build - test
# 2. Définir au moins un job avec un scriptmon-job: stage: build script: - echo "Hello GitLab CI!"Le fichier doit être :
- Nommé exactement
.gitlab-ci.yml(avec le point) - Placé à la racine du repository
- Encodé en UTF-8
Niveau 1 : Définir les stages
Section intitulée « Niveau 1 : Définir les stages »Les stages représentent les grandes étapes de votre pipeline. Ils s’exécutent dans l’ordre déclaré.
stages: - build # Étape 1 : compiler le code - test # Étape 2 : exécuter les tests - deploy # Étape 3 : déployer l'applicationRègles des stages :
| Règle | Explication |
|---|---|
| Ordre séquentiel | build se termine avant que test commence |
| Échec bloquant | Si build échoue, test et deploy ne s’exécutent pas |
| Stages par défaut | Sans déclaration, GitLab utilise : build, test, deploy |
Quand créer un nouveau stage ?
Section intitulée « Quand créer un nouveau stage ? »Créez un stage quand vous avez une dépendance logique :
- ✅
testdépend debuild→ 2 stages séparés - ✅
deploy-stagingavantdeploy-prod→ 2 stages séparés - ❌ Tests unitaires et tests d’intégration → même stage (pas de dépendance)
Niveau 2 : Définir les jobs
Section intitulée « Niveau 2 : Définir les jobs »Un job est une tâche qui appartient à un stage. C’est ici que vous décrivez ce qui doit être fait.
# Syntaxe d'un jobnom-du-job: # Nom libre, visible dans l'interface stage: test # À quel stage appartient ce job script: # Commandes à exécuter (OBLIGATOIRE) - commande1 - commande2Les propriétés d’un job
Section intitulée « Les propriétés d’un job »| Propriété | Obligatoire | Description |
|---|---|---|
script | ✅ Oui | Liste des commandes à exécuter |
stage | Non | Stage d’appartenance (défaut: test) |
image | Non | Image Docker pour l’environnement |
variables | Non | Variables d’environnement du job |
artifacts | Non | Fichiers à conserver après le job |
cache | Non | Fichiers à réutiliser entre pipelines |
rules | Non | Conditions d’exécution |
needs | Non | Dépendances explicites (ignore l’ordre des stages) |
Jobs en parallèle
Section intitulée « Jobs en parallèle »Les jobs d’un même stage s’exécutent en parallèle :
stages: - test
test-unitaires: stage: test script: - npm run test:unit
test-integration: stage: test script: - npm run test:integration
lint: stage: test script: - npm run lintCes 3 jobs démarrent simultanément car ils sont tous dans le stage test.
Niveau 3 : Écrire les scripts
Section intitulée « Niveau 3 : Écrire les scripts »Le script contient les commandes shell exécutées par le job.
build: stage: build script: - echo "Début du build" - npm ci - npm run build - echo "Build terminé"Règles du script
Section intitulée « Règles du script »| Règle | Exemple |
|---|---|
| Chaque ligne = une commande | - npm install |
| Exécution séquentielle | Ligne 1, puis ligne 2, puis ligne 3… |
| Échec = arrêt | Si une commande retourne un code ≠ 0, le job échoue |
| Shell par défaut | /bin/sh (ou celui de l’image Docker) |
Commandes multi-lignes
Section intitulée « Commandes multi-lignes »Pour des commandes longues, utilisez le pipe YAML | :
script: - | echo "Première ligne" echo "Deuxième ligne" if [ -f "config.json" ]; then echo "Config trouvée" fibefore_script et after_script
Section intitulée « before_script et after_script »Utilisez ces sections pour factoriser du code :
# S'exécute AVANT le script de chaque jobdefault: before_script: - echo "Préparation..." - npm ci
test: script: - npm test after_script: - echo "Nettoyage..." # S'exécute même si le job échoueSpécifier l’environnement avec image
Section intitulée « Spécifier l’environnement avec image »Par défaut, les jobs s’exécutent dans une image Docker Ruby. Spécifiez une image adaptée :
build: image: node:18-alpine # Node.js 18 sur Alpine Linux script: - node --version - npm ci - npm run buildImages recommandées :
| Langage | Image légère | Image complète |
|---|---|---|
| Node.js | node:18-alpine | node:18 |
| Python | python:3.11-slim | python:3.11 |
| Go | golang:1.21-alpine | golang:1.21 |
| Java | eclipse-temurin:17-alpine | eclipse-temurin:17 |
| Générique | alpine:3.19 | ubuntu:22.04 |
Définir des variables
Section intitulée « Définir des variables »Les variables permettent de configurer vos jobs sans modifier le script.
Variables globales
Section intitulée « Variables globales »variables: NODE_ENV: production DEPLOY_TARGET: staging
build: script: - echo "Environment: $NODE_ENV" - echo "Target: $DEPLOY_TARGET"Variables par job
Section intitulée « Variables par job »build: variables: NODE_ENV: development script: - npm run build
deploy: variables: NODE_ENV: production script: - npm run deployVariables prédéfinies GitLab
Section intitulée « Variables prédéfinies GitLab »GitLab injecte automatiquement des variables utiles :
| Variable | Contenu |
|---|---|
$CI_COMMIT_BRANCH | Nom de la branche |
$CI_COMMIT_SHORT_SHA | Hash court du commit |
$CI_PROJECT_NAME | Nom du projet |
$CI_PIPELINE_SOURCE | Déclencheur (push, merge_request, etc.) |
$CI_JOB_NAME | Nom du job en cours |
build: script: - echo "Building $CI_PROJECT_NAME on branch $CI_COMMIT_BRANCH" - echo "Commit: $CI_COMMIT_SHORT_SHA"Exemple complet commenté
Section intitulée « Exemple complet commenté »Voici un pipeline réaliste pour un projet Node.js :
# Déclaration des stages dans l'ordre d'exécutionstages: - build - test - deploy
# Variables globales disponibles dans tous les jobsvariables: NODE_ENV: production
# --- STAGE BUILD ---build: stage: build image: node:18-alpine script: - echo "📦 Installation des dépendances..." - npm ci - echo "🔨 Compilation..." - npm run build artifacts: paths: - dist/ # Conserve le dossier dist/ pour les jobs suivants expire_in: 1 hour # Supprimé après 1 heure
# --- STAGE TEST ---# Ces 2 jobs s'exécutent EN PARALLÈLEtest-unit: stage: test image: node:18-alpine script: - npm ci - npm run test:unit
test-lint: stage: test image: node:18-alpine script: - npm ci - npm run lint
# --- STAGE DEPLOY ---deploy: stage: deploy image: alpine:3.19 script: - echo "🚀 Déploiement vers $DEPLOY_TARGET..." - echo "Fichiers à déployer:" && ls dist/ rules: - if: $CI_COMMIT_BRANCH == "main" # Seulement sur main when: manual # Clic requis pour démarrerValider avant de commiter
Section intitulée « Valider avant de commiter »Avant de pusher, validez votre fichier :
- Dans GitLab : Build > Pipeline editor > Validate
- En local avec l’outil
gitlab-ci-lint:Fenêtre de terminal npm install -g gitlab-ci-lintgitlab-ci-lint .gitlab-ci.yml
À retenir
Section intitulée « À retenir »| Niveau | Élément | Rôle |
|---|---|---|
| 1 | stages | Définit l’ordre des grandes étapes |
| 2 | Jobs | Tâches à accomplir (nommées librement) |
| 3 | script | Commandes shell à exécuter |
Construction logique :
- Listez vos étapes →
stages - Pour chaque étape, listez les tâches → jobs
- Pour chaque tâche, listez les commandes →
script
Contrôle des connaissances
Section intitulée « Contrôle des connaissances »Testez vos connaissances sur la structure des fichiers .gitlab-ci.yml.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications