由于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仍然在詹金斯的报道报告中生成!
答案 0 :(得分:0)
终于成功了!关键是JacocoPuplisher。
step([$class: 'JacocoPublisher', changeBuildStatus: false, exclusionPattern:
'**/xxx/yyy/zzz/**/*.class, **/*Test*.class', inclusionPattern: '**/*.class',
minimumBranchCoverage: '80', sourcePattern: '**/src'])
这是我与詹金斯一起工作的唯一方法。
设置sonar.coverage.exclusion或使用上面的afterEvaluate东西无效。
答案 1 :(得分:0)
我能够通过直接添加到插件调用参数中来完成 jacoco()
Jenkins 管道插件(在我们的标准 Jenkinsfile 中在 pipeline { ... post { ... always {
中调用)中的文件/包排除,如下所示:< /p>
...
post {
always {
...
// Change the exclusion for the jacoco() jenkins plugin to exclude testutils package.
jacoco(exclusionPattern: '**/testutils/**,**/*Test*.class')
整个主题中最大的困惑之一似乎是有一个 jacocoTestReport
gradle 目标,它有自己的排除语法,然后是这个 jacoco()
Jenkins 管道任务,它似乎完全独立。声纳覆盖排除看起来可能是第三件事?