
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é.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »À 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
Prérequis
Section intitulée « Prérequis »Avant de continuer, assurez-vous de maîtriser :
Types de rapports (artifacts:reports)
Section intitulée « Types de rapports (artifacts:reports) »GitLab supporte plusieurs types de rapports, chacun avec son affichage dédié :
| Type | Affichage | Format |
|---|---|---|
junit | Tests échoués dans MR | JUnit XML |
coverage_report | Diff de couverture ligne par ligne | Cobertura XML |
codequality | Problèmes de qualité dans MR | Code Climate JSON |
sast | Vulnérabilités de code | SARIF/GitLab JSON |
secret_detection | Secrets détectés | GitLab JSON |
dependency_scanning | Vulnérabilités dépendances | GitLab JSON |
dotenv | Variables pour jobs suivants | KEY=value |
Rapports JUnit
Section intitulée « Rapports JUnit »Configuration de base
Section intitulée « Configuration de base »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.xmlInstallez le reporter :
npm install --save-dev jest-junitEt configurez jest.config.js :
module.exports = { reporters: [ 'default', ['jest-junit', { outputDirectory: '.', outputName: 'junit.xml' }] ]};test: image: python:3.11 script: - pip install pytest pytest-cov - pytest --junitxml=report.xml artifacts: when: always reports: junit: report.xmltest: image: golang:1.21 script: - go install github.com/jstemmer/go-junit-report/v2@latest - go test -v ./... 2>&1 | go-junit-report -set-exit-code > report.xml artifacts: when: always reports: junit: report.xmltest: image: maven:3.9-eclipse-temurin-17 script: - mvn test artifacts: when: always reports: junit: target/surefire-reports/*.xmlRésultat dans GitLab
Section intitulée « Résultat dans GitLab »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)
Couverture de code
Section intitulée « Couverture de code »Afficher le pourcentage global
Section intitulée « Afficher le pourcentage global »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 :
| Framework | Regex |
|---|---|
| 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.xmltest: script: - pytest --cov=app --cov-report=xml artifacts: reports: coverage_report: coverage_format: cobertura path: coverage.xmltest: script: - go test -coverprofile=coverage.out ./... - go install github.com/boumenot/gocover-cobertura@latest - gocover-cobertura < coverage.out > coverage.xml artifacts: reports: coverage_report: coverage_format: cobertura path: coverage.xmlCombiner les deux
Section intitulée « Combiner les deux »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.xmlRapports de qualité de code
Section intitulée « Rapports de qualité de code »Format Code Climate
Section intitulée « Format Code Climate »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.jsonESLint avec formatter GitLab
Section intitulée « ESLint avec formatter GitLab »npm install --save-dev @gitlab-formatters/eslint-formattercode_quality: script: - npx eslint -f @gitlab-formatters/eslint-formatter -o gl-code-quality-report.json src/ artifacts: reports: codequality: gl-code-quality-report.jsonUtiliser le template GitLab Code Quality
Section intitulée « Utiliser le template GitLab Code Quality »GitLab fournit un template officiel :
include: - template: Code-Quality.gitlab-ci.yml
code_quality: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"Rapports de sécurité
Section intitulée « Rapports de sécurité »SAST (Static Application Security Testing)
Section intitulée « SAST (Static Application Security Testing) »include: - template: Security/SAST.gitlab-ci.yml
sast: stage: test rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == "main"Détection de secrets
Section intitulée « Détection de secrets »include: - template: Security/Secret-Detection.gitlab-ci.yml
secret_detection: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"Analyse des dépendances
Section intitulée « Analyse des dépendances »include: - template: Security/Dependency-Scanning.gitlab-ci.ymlRapport dotenv (variables)
Section intitulée « Rapport dotenv (variables) »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"Bonnes pratiques
Section intitulée « Bonnes pratiques »1. Toujours utiliser when: always pour les tests
Section intitulée « 1. Toujours utiliser when: always pour les tests »test: script: npm test artifacts: when: always # Sinon pas de rapport si les tests échouent reports: junit: junit.xml2. Combiner plusieurs rapports
Section intitulée « 2. Combiner plusieurs rapports »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.xml3. Exécuter sur les MR
Section intitulée « 3. Exécuter sur les MR »test: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == "main"4. Ne pas bloquer sur la qualité (au début)
Section intitulée « 4. Ne pas bloquer sur la qualité (au début) »code_quality: script: npm run lint -- -f gitlab allow_failure: true # Informatif, ne bloque pas la MR artifacts: reports: codequality: gl-code-quality-report.jsonErreurs fréquentes
Section intitulée « Erreurs fréquentes »| Erreur | Cause | Solution |
|---|---|---|
| Rapport non affiché | Format incorrect | Vérifier le format (JUnit XML, Cobertura) |
| Tests échoués invisibles | when: always manquant | Ajouter when: always aux artefacts |
| Couverture 0% | Regex ne matche pas | Tester la regex sur les logs |
| Code quality vide | Format non Code Climate | Utiliser un formatter GitLab |
| ”Test summary” manquant | Fichier XML invalide | Valider le XML généré |
À retenir
Section intitulée « À retenir »| Rapport | Usage | Point clé |
|---|---|---|
junit | Tests échoués dans MR | when: always obligatoire |
coverage: | % global dans le badge | Regex sur les logs |
coverage_report: | Diff ligne par ligne | Format Cobertura |
codequality: | Problèmes ESLint/SonarQube | Format Code Climate |
sast: | Vulnérabilités de code | GitLab Ultimate pour MR |
dotenv: | Variables entre jobs | Propagé via needs: |
Contrôle des connaissances
Section intitulée « Contrôle des connaissances »Testez vos connaissances sur les rapports de qualité GitLab.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
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
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications