Aller au contenu
CI/CD & Automatisation medium

Rapports qualité GitLab CI/CD

10 min de lecture

logo gitlab

Vos tests passent mais vous ne voyez que “Job succeeded” ? GitLab peut afficher les résultats détaillés directement dans les merge requests : tests échoués, couverture de code, problèmes de qualité. Ce guide vous montre comment configurer les rapports de qualité.

À la fin de ce module, vous saurez :

  • Configurer des rapports JUnit : afficher les tests échoués dans la MR
  • Extraire la couverture de code : afficher le % global et le diff ligne par ligne
  • Intégrer les rapports de qualité : ESLint, SonarQube au format Code Climate
  • Activer les rapports de sécurité : SAST, secrets, dépendances
  • Utiliser dotenv : passer des variables entre jobs
  • Éviter les erreurs courantes : when: always, formats de rapport

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

GitLab supporte plusieurs types de rapports, chacun avec son affichage dédié :

TypeAffichageFormat
junitTests échoués dans MRJUnit XML
coverage_reportDiff de couverture ligne par ligneCobertura XML
codequalityProblèmes de qualité dans MRCode Climate JSON
sastVulnérabilités de codeSARIF/GitLab JSON
secret_detectionSecrets détectésGitLab JSON
dependency_scanningVulnérabilités dépendancesGitLab JSON
dotenvVariables pour jobs suivantsKEY=value

Le rapport JUnit affiche les tests échoués directement dans l’onglet “Tests” de la MR.

test:
image: node:20
script:
- npm ci
- npm test -- --reporters=jest-junit
artifacts:
when: always # Important : même si les tests échouent
reports:
junit: junit.xml

Installez le reporter :

Fenêtre de terminal
npm install --save-dev jest-junit

Et configurez jest.config.js :

module.exports = {
reporters: [
'default',
['jest-junit', { outputDirectory: '.', outputName: 'junit.xml' }]
]
};

Dans la MR, vous verrez :

  • Onglet Tests avec le nombre de tests passés/échoués
  • Liste des tests échoués avec le message d’erreur
  • Comparaison avec la branche cible (nouveaux échecs)

GitLab peut extraire le % de couverture depuis les logs avec une regex :

test:
script:
- npm test -- --coverage
coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/'

La regex doit capturer un nombre (groupe de capture). Exemples par framework :

FrameworkRegex
Jest`/All files[^
pytest-cov/TOTAL\s+\d+\s+\d+\s+(\d+)%/
Go/coverage:\s(\d+\.\d+)%/
JaCoCo/Total.*?(\d+%)/

Afficher la couverture ligne par ligne (Cobertura)

Section intitulée « Afficher la couverture ligne par ligne (Cobertura) »

Pour voir quelles lignes sont couvertes dans le diff de la MR :

test:
script:
- npm test -- --coverage --coverageReporters=cobertura
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
test:
script:
- npm test -- --coverage --coverageReporters=text --coverageReporters=cobertura
coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml

GitLab affiche les problèmes de qualité dans la MR si vous utilisez le format Code Climate :

code_quality:
image: node:20
script:
- npm ci
- npx eslint --format gitlab src/ > gl-code-quality-report.json || true
artifacts:
reports:
codequality: gl-code-quality-report.json
Fenêtre de terminal
npm install --save-dev @gitlab-formatters/eslint-formatter
code_quality:
script:
- npx eslint -f @gitlab-formatters/eslint-formatter -o gl-code-quality-report.json src/
artifacts:
reports:
codequality: gl-code-quality-report.json

GitLab fournit un template officiel :

include:
- template: Code-Quality.gitlab-ci.yml
code_quality:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
include:
- template: Security/SAST.gitlab-ci.yml
sast:
stage: test
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == "main"
include:
- template: Security/Secret-Detection.gitlab-ci.yml
secret_detection:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
include:
- template: Security/Dependency-Scanning.gitlab-ci.yml

Le rapport dotenv permet de passer des variables d’un job à l’autre :

build:
stage: build
script:
- VERSION=$(cat version.txt)
- echo "VERSION=$VERSION" >> build.env
artifacts:
reports:
dotenv: build.env
deploy:
stage: deploy
needs: [build]
script:
- echo "Déploiement version $VERSION"
test:
script: npm test
artifacts:
when: always # Sinon pas de rapport si les tests échouent
reports:
junit: junit.xml
test:
script:
- npm test -- --coverage --reporters=jest-junit
coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/'
artifacts:
when: always
reports:
junit: junit.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
test:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == "main"
code_quality:
script: npm run lint -- -f gitlab
allow_failure: true # Informatif, ne bloque pas la MR
artifacts:
reports:
codequality: gl-code-quality-report.json
ErreurCauseSolution
Rapport non affichéFormat incorrectVérifier le format (JUnit XML, Cobertura)
Tests échoués invisibleswhen: always manquantAjouter when: always aux artefacts
Couverture 0%Regex ne matche pasTester la regex sur les logs
Code quality videFormat non Code ClimateUtiliser un formatter GitLab
”Test summary” manquantFichier XML invalideValider le XML généré
RapportUsagePoint clé
junitTests échoués dans MRwhen: always obligatoire
coverage:% global dans le badgeRegex sur les logs
coverage_report:Diff ligne par ligneFormat Cobertura
codequality:Problèmes ESLint/SonarQubeFormat Code Climate
sast:Vulnérabilités de codeGitLab Ultimate pour MR
dotenv:Variables entre jobsPropagé via needs:

Testez vos connaissances sur les rapports de qualité GitLab.

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