Aller au contenu
CI/CD & Automatisation medium

Debug : pipeline skipped

10 min de lecture

logo gitlab

Vous avez poussé du code mais le pipeline n’apparaît pas ou est marqué “skipped” ? Ce guide vous aide à comprendre pourquoi et à corriger le problème.

SituationSymptômeCause
Pipeline skippedPipeline visible mais grisworkflow:rules ne matche pas ou [skip ci]
Jobs skippedPipeline vert mais jobs grisrules: des jobs ne matchent pas
Pas de pipelineRien dans PipelinesFichier absent, invalide, ou workflow:rules exclut ce cas

C’est la cause la plus fréquente. workflow:rules contrôle si le pipeline est créé.

Exemple de problème :

workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# ❌ Manque le cas des pushs !
# Ce pipeline ne se crée JAMAIS sur un push simple

Quand vous poussez sur une branche (sans MR ouverte), $CI_PIPELINE_SOURCE vaut push, pas merge_request_event. Aucune règle ne matche → pipeline skipped.

Solution :

workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH' # ✅ Ajouter le cas des pushs

Si aucun job n’est ajouté au pipeline (rules qui ne matchent nulle part), le pipeline apparaît généralement skipped ou vide selon le type de pipeline.

Exemple :

build:
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: never # Exclus sur main
- when: never # Exclus partout ailleurs !
test:
rules:
- if: '$CI_COMMIT_BRANCH == "develop"'
# Sur main, aucune règle ne matche → job skipped

Sur main, les deux jobs sont skipped → pipeline skipped.

Diagnostic : vérifiez que au moins un job s’exécute dans chaque scénario.

Un fichier YAML invalide empêche la création du pipeline.

Diagnostic :

  1. Build > Pipeline editor → Collez votre fichier → Validate
  2. Utilisez l’option “Simulate pipeline creation” pour voir quelles rules bloquent
  3. Ou Build > Pipelines → Message d’erreur en rouge

Erreurs courantes :

ErreurCauseSolution
Invalid yaml syntaxIndentation incorrecteUtiliser 2 espaces, pas de tabs
Unknown keyFaute de frappeVérifier l’orthographe (script pas scripts)
jobs:xxx:rules config should be an arrayMauvaise structurerules: doit être une liste

GitLab évite les pipelines en double. Si une MR est ouverte pour votre branche, seul le pipeline MR s’exécute.

Exemple (pattern recommandé par GitLab) :

workflow:
rules:
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never # Skip si branche a une MR
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH'

Avec cette config, pousser sur une branche avec MR ouverte ne crée pas de pipeline push (c’est voulu pour éviter les doublons).

Un commit contenant [skip ci] ou [ci skip] dans son message provoque un pipeline skipped.

Piège courant : lors de la création d’une branche depuis un commit “skip ci”, le nouveau pipeline hérite de ce comportement.

Diagnostic :

Vérifiez le message du dernier commit :

Fenêtre de terminal
git log -1 --format=%B

Solution : faites un nouveau commit sans [skip ci] ou utilisez Run pipeline depuis l’interface.

  1. Vérifier que le fichier existe

    Le fichier doit s’appeler exactement .gitlab-ci.yml à la racine du repo.

  2. Valider le YAML

    Build > Pipeline editor > Validate

  3. Vérifier workflow:rules

    Quelles sont vos règles ? Matchent-elles votre cas ?

    workflow:
    rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_COMMIT_BRANCH'
    - if: '$CI_COMMIT_TAG'
  4. Ajouter un job de debug

    debug:
    script:
    - echo "SOURCE=$CI_PIPELINE_SOURCE"
    - echo "BRANCH=$CI_COMMIT_BRANCH"
    - echo "TAG=$CI_COMMIT_TAG"
    - echo "MR=$CI_MERGE_REQUEST_ID"
    rules:
    - if: '$CI_PIPELINE_SOURCE'
    when: always
  5. Utiliser le CI Lint avec simulation

    Build > Pipeline editor > Validate puis activez “Simulate pipeline creation” pour voir exactement quels jobs seraient créés.

Source$CI_PIPELINE_SOURCEQuand ?
PushpushCommit poussé
Merge Requestmerge_request_eventMR créée/mise à jour
ScheduleschedulePipeline planifié
WebwebBouton “Run pipeline”
APIapiAppel API
TriggertriggerToken de trigger
Parentparent_pipelinePipeline parent-enfant
Multi-projectpipelinePipeline multi-projets
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH'

Pipeline sur push, mais pas si MR ouverte (éviter doublons)

Section intitulée « Pipeline sur push, mais pas si MR ouverte (éviter doublons) »
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'
workflow:
rules:
- if: '$CI_COMMIT_TAG'
workflow:
rules:
- if: '$CI_COMMIT_BRANCH =~ /^wip-/'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH'
- if: '$CI_COMMIT_TAG'
□ Le fichier .gitlab-ci.yml existe-t-il à la racine ?
□ Le YAML est-il valide ? (Pipeline editor > Validate + Simulate)
□ Le commit contient-il [skip ci] ou [ci skip] ?
□ Y a-t-il une section workflow:rules ?
→ Oui : Couvre-t-elle votre cas (push, MR, schedule...) ?
→ Non : Le pipeline devrait se créer
□ Au moins un job a-t-il des rules qui matchent ?
□ La branche a-t-elle une MR ouverte ?
→ Vérifier si c'est voulu dans workflow:rules
  1. Pipeline skipped = workflow:rules ne matche pas ou [skip ci] dans le commit
  2. Tous les jobs skipped = aucune rules: de job ne matche (pipeline vide)
  3. Pas de pipeline = fichier invalide, absent, ou workflow:rules exclut ce cas
  4. [skip ci] dans un commit peut affecter les branches créées depuis ce commit
  5. Première règle qui matche gagne — ordre important
  6. CI Lint + Simulate pour valider avant de pusher

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
70% requis

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