由于我的Jenkins管道失败,尝试从覆盖率报告中排除软件包。我有一个包含所有POJO的子项目。我不想为所有这些编写uittest。因此,他们将下拉分支/行coverage,以使coverage低于阈值并使我的构建失败。
应该可以排除某些软件包,但我无法使其正常工作。
我有以下jacoco.gradle文件:
apply plugin: 'jacoco' apply plugin: 'java' jacoco { toolVersion = "0.8.2" } jacocoTestReport { reports { xml.enabled true csv.enabled false html.enabled true } afterEvaluate { classDirectories = files(classDirectories.files.collect { fileTree(dir: it, exclude: '**xxx/yyy/zzz/**') }) } task coverage { dependsOn 'jacocoTestReport' } check.dependsOn 'jacocoTestReport'
我的sonar.gradle文件中的以下内容:
apply plugin: 'org.sonarqube' sonarqube { properties { property "sonar.forceAnalysis", "true" property "sonar.forceAuthentication", "true" property "sonar.java.coveragePlugin", "jacoco" property "sonar.login", "" property "sonar.password", "" } } subprojects { sonarqube { properties { property "sonar.jacoco.reportPaths", "$buildDir/reports/jacoco/allTests.exec" property "sonar.junit.reportsPath", "$buildDir/test-results/test" } } } task sonar { dependsOn 'sonarqube' }
在我的build.gradle中:
apply from: 'gradle/sonar.gradle' ... apply plugin: 'java' ... subprojects { apply from: '../gradle/jacoco.gradle' ... }
最后从我的Jenkins文件中:
step([$class: 'JacocoPublisher', changeBuildStatus: false, exclusionPattern: '**/*Test*.class', inclusionPattern: '**/*.class', minimumBranchCoverage: '80', sourcePattern: '**/src']) try { dir(BUILD_DIR) { sh './gradlew sonar' }
但是xxx.yyy.zzz仍然在詹金斯的报道报告中生成!
终于成功了!关键是JacocoPuplisher。
step([$class: 'JacocoPublisher', changeBuildStatus: false, exclusionPattern: '**/xxx/yyy/zzz/**/*.class, **/*Test*.class', inclusionPattern: '**/*.class', minimumBranchCoverage: '80', sourcePattern: '**/src'])
这是我与詹金斯一起工作的唯一方法。
设置sonar.coverage.exclusion或使用上述afterEvaluate东西无效。