pipeline { agent any stages { stage('Build') { steps { withChecks(name: 'build', includeStage: false) { withGradle { sh """ ./gradlew clean testClasses --no-daemon """ } } } } // Build stage('Test') { steps { withChecks(name: 'test-coverage', includeStage: false) { withGradle { sh """ ./gradlew test jacocoTestReport jacocoTestCoverageVerification --no-daemon """ } recordCoverage(tools: [[parser: 'JACOCO', pattern: '**/build/reports/jacoco/test/jacoco*.xml']], id: 'jacoco', name: 'Jacoco Coverage', sourceCodeRetention: 'EVERY_BUILD', qualityGates: [ [threshold: 40.0, metric: 'CLASS', baseline: 'PROJECT', unstable: true], [threshold: 40.0, metric: 'METHOD', baseline: 'PROJECT', unstable: true], [threshold: 40.0, metric: 'LINE', baseline: 'PROJECT', unstable: true], [threshold: 40.0, metric: 'BRANCH', baseline: 'PROJECT', unstable: true]] ) } } } // Test stage('Post') { steps { script { junit '**/build/test-results/test/TEST-*.xml' // archiveArtifacts artifacts: '**/coverage-sources.zip', allowEmptyArchive: false, fingerprint: false, onlyIfSuccessful: false publishHTML (target: [ allowMissing: true, alwaysLinkToLastBuild: false, keepAll: true, reportDir: 'app/build/reports/jacoco/test/html', reportFiles: 'index.html', reportName: 'Coverage Report' ]) // def pmd = scanForIssues tool: [$class: 'Pmd'], pattern: 'lib/build/reports/pmd/*.xml' // publishIssues issues: [pmd] } } } // Post } }