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