Aller au contenu
CI/CD & Automatisation medium

Valider un fichier .gitlab-ci.yml

15 min de lecture

logo gitlab

Vous poussez votre .gitlab-ci.yml, le pipeline échoue avec une erreur de syntaxe, vous corrigez, vous re-poussez… et nouvelle erreur. Cette boucle frustrante est évitable : GitLab fournit plusieurs outils pour valider votre configuration avant le commit.

Ce guide vous présente 5 méthodes, de la plus simple (interface web) à la plus avancée (exécution locale). Choisissez celle qui correspond à votre workflow.

À la fin de ce module, vous saurez :

  • Utiliser le Pipeline Editor pour visualiser et valider votre pipeline
  • Utiliser le CI Lint pour vérifier la syntaxe YAML
  • Valider depuis VS Code avec l’extension GitLab Workflow
  • Tester un job localement avant de le pousser

Avant de continuer, assurez-vous de maîtriser :

Le problème : le cycle “push → erreur → fix → push”

Section intitulée « Le problème : le cycle “push → erreur → fix → push” »

Sans validation locale, voici ce qui se passe typiquement :

1. Vous modifiez .gitlab-ci.yml
2. git add . && git commit -m "fix pipeline" && git push
3. Pipeline échoue : "jobs config should contain at least one visible job"
4. Vous corrigez
5. git add . && git commit -m "fix pipeline v2" && git push
6. Pipeline échoue : "invalid YAML syntax"
7. ...

Résultat : 5 commits pour une modification qui aurait pu être validée en 10 secondes.

Les outils de validation permettent de détecter ces erreurs avant le push — vous économisez du temps, des commits inutiles, et surtout de la frustration.

Le Pipeline Editor est l’outil le plus pratique pour travailler sur votre .gitlab-ci.yml. Il combine édition, validation et visualisation en une seule interface.

Pipeline Editor GitLab

  1. Ouvrir le Pipeline Editor

    Dans votre projet GitLab, allez dans : Build → Pipeline editor

    Vous voyez votre fichier .gitlab-ci.yml actuel (ou un template si le fichier n’existe pas encore).

  2. Modifier votre configuration

    L’éditeur offre de l’autocomplétion et de la coloration syntaxique pour le YAML GitLab CI/CD.

    À chaque frappe, GitLab valide automatiquement la syntaxe. Les erreurs apparaissent en temps réel.

  3. Visualiser le pipeline

    Cliquez sur l’onglet “Visualize” pour voir la représentation graphique de votre pipeline :

    • Les stages et leur ordre
    • Les jobs dans chaque stage
    • Les dépendances (needs)

    Pipeline Editor — onglet Visualize

    C’est particulièrement utile quand vous utilisez les DAG et le parallélisme.

  4. Voir la configuration complète (merged)

    L’onglet “View merged YAML” (ou “Full configuration”) affiche la configuration après résolution de tous les include.

    C’est indispensable quand vous utilisez des templates : vous voyez exactement ce que GitLab va exécuter.

  5. Valider et committer

    Le bouton “Validate” vérifie :

    • La syntaxe YAML
    • Les références aux jobs (extends, needs)
    • Les noms de stages

    Si tout est valide, vous pouvez committer directement depuis l’interface.

Le CI Lint est un validateur standalone, utile quand vous voulez tester un bout de YAML sans toucher à votre fichier actuel.

  1. Accéder au CI Lint

    Dans votre projet : Build → Pipelines puis cliquez sur “CI lint” (en haut à droite).

    Alternative : accédez directement à l’URL https://gitlab.com/<votre-projet>/-/ci/lint

  2. Coller votre configuration

    Collez le contenu de votre .gitlab-ci.yml dans la zone de texte.

  3. Valider

    Cliquez sur “Validate”. GitLab affiche :

    • Syntax is correct si tout va bien
    • Syntax is incorrect avec le détail des erreurs
  4. Simuler l’exécution (optionnel)

    Cochez la case “Simulate a pipeline created for the default branch” pour une validation plus poussée.

    La simulation évalue votre configuration comme si un pipeline push était créé sur la branche par défaut. Elle vérifie :

    • Les rules et conditions (dans ce contexte précis)
    • Les variables prédéfinies disponibles
    • Les références aux jobs

    ⚠️ Cela ne simule pas les autres contextes (MR, schedule, web trigger, etc.).

Configuration avec erreur :

stages:
- build
- test
build:
stage: build
script: npm run build
test:
stage: test
script: npm test
needs: ["inexistant-job"] # ❌ Ce job n'existe pas

Résultat du CI Lint :

Syntax is incorrect
'test' job needs 'inexistant-job' job, but it was not added to the pipeline

Pour ceux qui développent dans VS Code, l’extension GitLab Workflow permet de valider sans quitter l’éditeur.

  1. Installer l’extension

    Dans VS Code, cherchez et installez : GitLab Workflow (éditeur : GitLab)

  2. Configurer l’accès

    Créez un Personal Access Token (PAT) dans GitLab :

    • Allez dans User Settings → Access Tokens
    • Créez un token avec les scopes : api, read_user

    Dans VS Code, ouvrez la palette de commandes (Ctrl+Shift+P) et tapez :

    • GitLab: Set GitLab Personal Access Token
    • Entrez l’URL de votre GitLab (ex: https://gitlab.com)
    • Collez votre token
  3. Valider votre fichier

    Ouvrez votre .gitlab-ci.yml, puis :

    • Palette de commandes (Ctrl+Shift+P)
    • GitLab: Validate GitLab CI/CD Configuration

    L’extension envoie le fichier à l’API GitLab et affiche le résultat.

L’extension GitLab Workflow offre aussi :

  • Vue des pipelines : voir le statut des pipelines en cours
  • Vue des issues et MR : gérer les tickets sans quitter VS Code
  • Liens rapides : cliquer sur l’icône GitLab ouvre la page du projet

L’API permet de valider programmatiquement, utile pour :

  • Scripts de pre-commit
  • Pipelines de vérification
  • Outils personnalisés
Fenêtre de terminal
# Variables d'environnement (à définir avant)
# export GITLAB_TOKEN="glpat-xxxxxxxxxxxx"
GITLAB_URL="https://gitlab.com"
PROJECT_ID="12345" # ou chemin encodé: "group%2Fproject"
# Envoyer le fichier pour validation
curl --request POST \
--header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
--header "Content-Type: application/json" \
"$GITLAB_URL/api/v4/projects/$PROJECT_ID/ci/lint" \
--data "{\"content\": $(cat .gitlab-ci.yml | jq -Rs .)}"
# Pour obtenir aussi le merged YAML (avec résolution des includes)
curl --request POST \
--header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
--header "Content-Type: application/json" \
"$GITLAB_URL/api/v4/projects/$PROJECT_ID/ci/lint" \
--data "{\"content\": $(cat .gitlab-ci.yml | jq -Rs .), \"include_merged_yaml\": true}"

Réponse en cas de succès :

{
"valid": true,
"merged_yaml": "...",
"errors": [],
"warnings": []
}

Réponse en cas d’erreur :

{
"valid": false,
"errors": ["jobs config should contain at least one visible job"],
"warnings": []
}

Créez un hook Git qui valide avant chaque commit :

.git/hooks/pre-commit
#!/bin/bash
if [ -f ".gitlab-ci.yml" ]; then
echo "Validation du pipeline GitLab..."
RESULT=$(curl -s --request POST \
--header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
--header "Content-Type: application/json" \
"$GITLAB_URL/api/v4/projects/$PROJECT_ID/ci/lint" \
--data "{\"content\": $(cat .gitlab-ci.yml | jq -Rs .)}")
VALID=$(echo $RESULT | jq -r '.valid')
if [ "$VALID" != "true" ]; then
echo "❌ Pipeline invalide :"
echo $RESULT | jq -r '.errors[]'
exit 1
fi
echo "✅ Pipeline valide"
fi

Méthode 5 : Debug local avec gitlab-runner (avancé)

Section intitulée « Méthode 5 : Debug local avec gitlab-runner (avancé) »

Cette méthode est utile pour :

  • Déboguer un script complexe sans pousser
  • Tester sans consommer les minutes CI/CD
  • Développer hors-ligne

Téléchargez le binaire depuis gitlab-runner-downloads pour votre OS.

Linux (exemple) :

Fenêtre de terminal
curl -L --output gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
chmod +x gitlab-runner
sudo mv gitlab-runner /usr/local/bin/
Fenêtre de terminal
# Exécuter le job "build" avec l'executor Docker
gitlab-runner exec docker build

Exemple avec variables :

Fenêtre de terminal
gitlab-runner exec docker build \
--env CI_COMMIT_REF_SLUG="main" \
--env CI_PROJECT_NAME="mon-projet"

L’outil gitlabci-local offre une meilleure expérience pour l’exécution locale :

Fenêtre de terminal
# Installation
pip install gitlabci-local
# Lancer le menu interactif
gitlabci-local
# Lancer tout le pipeline
gitlabci-local -p
# Lancer un job spécifique
gitlabci-local "build"
# Mode debug (conserve le conteneur)
gitlabci-local "build" --debug
  1. Développement quotidien — Validez avec l’extension VS Code ou le CI Lint avant de committer

  2. Pipeline avec templates/includes — Utilisez le Pipeline Editor pour voir le merged YAML (configuration finale)

  3. Automatisation — Intégrez l’API lint dans un hook pre-commit ou un job CI de vérification

SituationMéthode recommandée
Modification rapide dans GitLabPipeline Editor
Développement quotidienExtension VS Code
Vérifier un snippet YAMLCI Lint
Automatiser la validationAPI GitLab
Déboguer un script complexegitlab-runner exec ou gitlabci-local

Pour la plupart des développeurs, la combinaison Pipeline Editor + Extension VS Code couvre 95% des besoins.

1. “jobs config should contain at least one visible job”

Section intitulée « 1. “jobs config should contain at least one visible job” »

Cause : Tous vos jobs sont “cachés” (commencent par .) ou exclus par les rules.

Solution : Assurez-vous d’avoir au moins un job sans point au début du nom et sans rules qui l’exclut toujours.

Cause : Typo dans un mot-clé YAML, ou utilisation d’une propriété qui n’existe pas.

Solution : Vérifiez l’orthographe dans la référence YAML GitLab CI/CD.

3. “needs ‘job’ was not added to the pipeline”

Section intitulée « 3. “needs ‘job’ was not added to the pipeline” »

Cause : Un job référencé dans needs n’existe pas ou est exclu par ses rules.

Solution : Vérifiez que le job existe et que ses rules ne l’excluent pas dans le contexte actuel.

4. Je ne vois pas la configuration finale avec mes includes

Section intitulée « 4. Je ne vois pas la configuration finale avec mes includes »

Cause : Vous utilisez le CI Lint standalone sans demander le merged YAML.

Solution : Utilisez le Pipeline Editor → View merged YAML pour voir la configuration après résolution de tous les include.

  1. Pipeline Editor = outil #1 pour la plupart des cas (validation + visualisation + commit)
  2. CI Lint = validation rapide d’un snippet sans toucher au fichier
  3. Extension VS Code = validation sans quitter l’éditeur
  4. API GitLab = automatisation (pre-commit hooks, scripts)
  5. gitlab-runner exec = test d’un job isolé (mais pas de pipeline complet)
  6. View merged YAML = indispensable quand vous utilisez des templates

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.