From ab1b5e2e0a240d4fabbcd53fcefa30c5718a039e Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Tue, 7 Apr 2026 06:39:20 +0100 Subject: [PATCH] jenkin jacoco alignment --- .../LSN-0039-jenkins-jacoco-alignment.md | 16 ++++++ files/config/Jenkinsfile | 49 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 discussion/lessons/DSC-0024-jacoco-reports-consolidation/LSN-0039-jenkins-jacoco-alignment.md create mode 100644 files/config/Jenkinsfile diff --git a/discussion/lessons/DSC-0024-jacoco-reports-consolidation/LSN-0039-jenkins-jacoco-alignment.md b/discussion/lessons/DSC-0024-jacoco-reports-consolidation/LSN-0039-jenkins-jacoco-alignment.md new file mode 100644 index 00000000..9ec6fa03 --- /dev/null +++ b/discussion/lessons/DSC-0024-jacoco-reports-consolidation/LSN-0039-jenkins-jacoco-alignment.md @@ -0,0 +1,16 @@ +# LSN-0039: Jenkins + JaCoCo Integration with Multi-Module Gradle + +- **Problem:** O Jenkinsfile estava desatualizado, tentando rodar uma task de cobertura inexistente (`testCodeCoverageReport`) em um subprojeto específico, ignorando a cobertura global e causando falhas no pipeline. +- **Decision:** Alinhar o `Jenkinsfile` com a task de agregação customizada no root project (`jacocoTestReport`), removendo a dependência de subprojetos específicos para métricas globais. +- **Implementation:** + - Atualizado o comando de execução no Jenkins: `./gradlew clean test jacocoTestReport`. + - Ajustado o `recordCoverage` para ler o XML consolidado em `build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml`. + - Ajustado o `publishHTML` para exibir o relatório consolidado em `build/reports/jacoco/jacocoTestReport/html`. +- **Example:** + - Antes: `SRS_APP/build/reports/...` (específico por app). + - Depois: `build/reports/...` (global do projeto). +- **Pitfalls:** + - Ao usar relatórios consolidados no root, deve-se garantir que o Gradle rode a task de agregação *após* os testes de todos os subprojetos. + - O Jenkins precisa de acesso ao workspace root para encontrar esses arquivos; caminhos relativos no `Jenkinsfile` geralmente partem do root do checkout. +- **References:** + - `DSC-0024`, `DEC-0025`, `PLN-0048`. diff --git a/files/config/Jenkinsfile b/files/config/Jenkinsfile new file mode 100644 index 00000000..2d925ba7 --- /dev/null +++ b/files/config/Jenkinsfile @@ -0,0 +1,49 @@ +pipeline { + agent any + + environment { + } + + stages { + stage('Build') { + steps { + withChecks(name: 'Test', includeStage: true) { + withGradle { + sh """ + ./gradlew clean test jacocoTestReport --no-daemon + """ + } + recordCoverage(tools: [[parser: 'JACOCO', pattern: "build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml"]], + id: 'jacoco', + name: 'JaCoCo Coverage', + sourceCodeRetention: 'EVERY_BUILD', + qualityGates: [ + [threshold: 50.0, metric: 'CLASS', baseline: 'PROJECT', unstable: true], + [threshold: 50.0, metric: 'METHOD', baseline: 'PROJECT', unstable: true], + [threshold: 50.0, metric: 'LINE', baseline: 'PROJECT', unstable: true], + [threshold: 50.0, metric: 'INSTRUCTION', baseline: 'PROJECT', unstable: true], + [threshold: 40.0, metric: 'BRANCH', baseline: 'PROJECT', unstable: true]]) + junit testResults: '**/build/test-results/test/TEST-*.xml' + } + } + } // Test + + stage('Reports') { + steps { + script { + // archiveArtifacts artifacts: '**/coverage-sources.zip', allowEmptyArchive: false, fingerprint: false, onlyIfSuccessful: false + publishHTML (target: [ + allowMissing: true, + alwaysLinkToLastBuild: false, + keepAll: true, + reportDir: "build/reports/jacoco/jacocoTestReport/html", + reportFiles: 'index.html', + reportName: 'Coverage Report' + ]) + // def pmd = scanForIssues tool: [$class: 'Pmd'], pattern: 'lib/build/reports/pmd/*.xml' + // publishIssues issues: [pmd] + } + } + } // Reports + } +} \ No newline at end of file