【问题标题】:How to get Jenkins to exclude entire folders from code coverage?如何让 Jenkins 将整个文件夹排除在代码覆盖范围之外?
【发布时间】:2014-07-27 11:05:07
【问题描述】:
我试图弄清楚如何从 Jenkins 启动的 jacoco 生成的代码覆盖率报告中排除文件夹列表。
似乎可以排除类,但不能排除文件夹,这对我来说很烦人,因为我已经开始使用一个相当大的库用于在线支付系统。运行这些单元测试意味着不断地在该平台上创建测试帐户并不得不再次删除它们。每一个尖齿 Jenkins 都会运行。
仅排除文件夹比排除每个类要简单得多。
【问题讨论】:
标签:
jenkins
code-coverage
jacoco
【解决方案1】:
如果您使用管道和 Jenkinsfile,您可以使用以下设置示例(假设为 gradle):
stage("Check code quality and coverage") {
steps{
sh "./gradlew jacocoTestReport sonarqube -x check"
step( [$class: 'JacocoPublisher',
exclusionPattern: '**/*Exception*,**/*Configuration*,**/ApiApplication*,**/*Test*'] )
}
}
这里需要注意的是 excludePattern 用逗号分隔,并且在多个排除模式之间 NO SPACES。
查看潜在设置的完整列表的最简单方法是查看代码:
https://github.com/jenkinsci/jacoco-plugin/blob/master/src/main/java/hudson/plugins/jacoco/JacocoPublisher.java
并查看@DataBoundSetter 的
public JacocoPublisher() {
this.execPattern = "**/**.exec";
this.classPattern = "**/classes";
this.sourcePattern = "**/src/main/java";
this.inclusionPattern = "";
this.exclusionPattern = "";
this.skipCopyOfSrcFiles = false;
this.minimumInstructionCoverage = "0";
this.minimumBranchCoverage = "0";
this.minimumComplexityCoverage = "0";
this.minimumLineCoverage = "0";
this.minimumMethodCoverage = "0";
this.minimumClassCoverage = "0";
this.maximumInstructionCoverage = "0";
this.maximumBranchCoverage = "0";
this.maximumComplexityCoverage = "0";
this.maximumLineCoverage = "0";
this.maximumMethodCoverage = "0";
this.maximumClassCoverage = "0";
this.changeBuildStatus = false;
this.deltaInstructionCoverage = "0";
this.deltaBranchCoverage = "0";
this.deltaComplexityCoverage = "0";
this.deltaLineCoverage = "0";
this.deltaMethodCoverage = "0";
this.deltaClassCoverage = "0";
this.buildOverBuild = false;
}
【解决方案2】:
要通过更改 Jenkins JaCoCo 插件配置来排除整个目录,您需要在“排除”字段中添加一个条目。
例如,如果您想排除任何名为“test”的目录下的任何文件,您可以添加以下排除项:
**/test/**
请记住,如果您想添加多个排除项,您必须用逗号分隔每个排除项,并且不能有空格(由于插件的错误)。
这是我的 JaCoCo 插件配置:
Example JaCoCo Plugin Configuration
【解决方案3】:
通过指定sonar.jacoco.excludes 参数从声纳分析中排除类:
sonar.jacoco.excludes=*/exceptions/*:*/dto/*