Aller au contenu
CI/CD & Automatisation medium

Debug : lire les logs GitLab CI/CD

9 min de lecture

logo gitlab

Votre job a échoué avec un message cryptique dans les logs ? Ce guide vous apprend à lire les logs GitLab CI/CD efficacement et à identifier rapidement la cause des erreurs.

Un job GitLab CI/CD s’exécute en plusieurs phases :

Phases d'exécution d'un job GitLab CI/CD : de la préparation du runner jusqu'à la sauvegarde des artefacts

Chaque section est pliable dans l’interface. Cliquez sur une section pour voir son contenu.

  1. Ouvrir le job en échec

    Build > Jobs → Cliquez sur le job rouge

  2. Aller à la fin des logs

    Scrollez en bas ou cliquez sur le bouton “Scroll to bottom”

  3. Trouver la dernière commande exécutée

    Juste avant Job failed se trouve la commande qui a échoué.

  4. Lire le message d’erreur

    Remontez quelques lignes pour voir le message d’erreur complet.

$ npm run build
bash: npm: command not found

Cause : L’outil n’est pas installé dans l’image Docker.

Solutions :

  • Utiliser une image qui contient l’outil : image: node:18
  • Installer dans before_script : apt-get install -y nodejs npm
$ cat config.json
cat: config.json: No such file or directory

Cause : Le fichier n’existe pas ou mauvais chemin.

Solutions :

  • Vérifier le chemin (absolu vs relatif)
  • Ajouter ls -la avant pour lister les fichiers
  • Vérifier que les artefacts sont bien téléchargés
$ ./deploy.sh
bash: ./deploy.sh: Permission denied

Cause : Le script n’est pas exécutable.

Solution :

before_script:
- chmod +x deploy.sh
FAIL src/utils.test.js
✕ should return correct value (5 ms)
Test Suites: 1 failed

Cause : Le code ne passe pas les tests.

Solution : Corriger le code ou les tests !

$ some_command
ERROR: Something went wrong
Job failed: exit code 1

Cause : La commande a retourné un code d’erreur.

Diagnostic : Lire le message ERROR au-dessus.

Pour voir toutes les commandes exécutées avec leurs valeurs :

variables:
CI_DEBUG_TRACE: "true"
job:
script:
- echo $MY_SECRET # Affichera la valeur !

Activer temporairement (sans modifier le fichier) :

  1. Build > Pipelines > Run pipeline
  2. Ajoutez la variable CI_DEBUG_TRACE = true
  3. Lancez le pipeline
build:
script:
# Afficher les variables d'environnement
- echo "Branch: $CI_COMMIT_BRANCH"
- echo "Source: $CI_PIPELINE_SOURCE"
# Lister les fichiers
- ls -la
- pwd
# Afficher le contenu d'un fichier
- cat package.json
# Votre commande
- npm run build

Par défaut, le runner arrête le job à la première commande qui échoue (code de sortie ≠ 0). Pour continuer malgré une erreur :

job:
script:
- command_that_may_fail || true # Continue même si erreur
- another_command

Pour marquer un job comme “non bloquant” pour le pipeline :

job:
allow_failure: true
script:
- risky_command

Pour analyser offline ou partager :

  1. Dans la page du job, bouton Download (à droite des logs)
  2. Ou via API :
Fenêtre de terminal
# Remplacez par l'URL de votre instance GitLab
# Le token doit avoir les droits read_api sur le projet
curl --header "PRIVATE-TOKEN: $TOKEN" \
"https://gitlab.example.com/api/v4/projects/$PROJECT_ID/jobs/$JOB_ID/trace" \
> job.log

Même si le job échoue ou est annulé, after_script s’exécute. Utilisez-le pour collecter des infos :

job:
script:
- npm test
after_script:
# S'exécute même si npm test échoue ou si le job est annulé
- echo "Job status: $CI_JOB_STATUS" # success, failed, ou canceled
- echo "Collecting debug info..."
- cat npm-debug.log || true
- ls -la node_modules/ || true

Dans l’interface GitLab :

  1. Ctrl+F (ou Cmd+F) pour chercher dans la page
  2. Cherchez : error, failed, not found, denied

En ligne de commande après téléchargement :

Fenêtre de terminal
# Trouver les erreurs
grep -i "error\|failed\|denied" job.log
# Avec contexte (5 lignes avant/après)
grep -i -B5 -A5 "error" job.log

Cette page couvre les logs de job (visibles dans l’interface GitLab). Si le job ne démarre pas ou si vous suspectez un problème d’executor/cache, consultez les logs du runner :

Fenêtre de terminal
# Logs du service gitlab-runner
journalctl -u gitlab-runner -n 200
# Si executor Docker
docker logs gitlab-runner
# Si executor Kubernetes
kubectl logs -n gitlab-runner <pod-name>
  1. Scrollez en bas des logs pour voir l’erreur finale
  2. exit code 1 = la commande a échoué, lire au-dessus
  3. Sections pliables : cliquez pour ouvrir/fermer
  4. CI_DEBUG_TRACE: true pour le mode verbose (⚠️ expose les secrets !)
  5. after_script s’exécute même après échec ou annulation
  6. allow_failure: true = le pipeline continue, mais le job échoue quand même
  7. Pipes avec | : attention à pipefail qui peut faire échouer la ligne

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

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.