JaCoCo 覆盖率报告
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
History
- 引入于极狐GitLab 17.3,使用名为 jacoco_coverage_reports 的功能标志。默认禁用。
- 在极狐GitLab 17.6 中 GA。功能标志 jacoco_coverage_reports 被移除。
为了让 JaCoCo 覆盖率报告正常工作,你必须生成一个格式正确的 JaCoCo XML 文件,该文件提供行覆盖率。
JaCoCo 覆盖率报告可视化支持:
- 指令 (C0 覆盖率),报告中的 ci(被覆盖的指令)。
添加 JaCoCo 覆盖率任务
要配置你的流水线以生成覆盖率报告,请在你的 .gitlab-ci.yml 文件中添加一个任务。例如:
下面是一个示例配置:
yaml1test-jdk11: 2 stage: test 3 image: maven:3.6.3-jdk-11 4 script: 5 - mvn $MAVEN_CLI_OPTS clean org.jacoco:jacoco-maven-plugin:prepare-agent test jacoco:report 6 artifacts: 7 reports: 8 coverage_report: 9 coverage_format: jacoco 10 path: target/site/jacoco/jacoco.xml
在这个示例中,mvn 命令生成 JaCoCo 覆盖率报告。path 指向生成的报告。
如果任务生成多个报告,在产物路径中使用通配符。
修正相对文件路径
文件路径转换
JaCoCo 报告提供相对文件路径,但覆盖率报告可视化需要绝对路径。极狐GitLab 会尝试使用相关合并请求中的数据将相对路径转换为绝对路径。
路径匹配过程如下:
- 找到与同一流水线引用相关的所有合并请求。
- 对于所有更改的文件,找到所有的绝对路径。
- 对于报告中的每个相对路径,使用第一个匹配的绝对路径。
这个过程可能无法始终找到合适的匹配绝对路径。
多个模块或源目录
对于多个模块或源目录的相同文件名,默认情况下可能无法找到绝对路径。
例如,如果这些文件在一个合并请求中发生更改,极狐GitLab 无法找到绝对路径:
- src/main/java/org/acme/DemoExample.java
- src/main/other-module/org/acme/DemoExample.java
为了成功进行路径转换,你必须在相对路径中有一些独特的差异。例如,你可以更改其中一个文件或目录名:
-
更改文件名:
diffsrc/main/java/org/acme/DemoExample.java - src/main/other-module/org/acme/DemoExample.java + src/main/other-module/org/acme/OtherDemoExample.java -
更改路径:
diffsrc/main/java/org/acme/DemoExample.java - src/main/other-module/org/acme/DemoExample.java + src/main/other-module/org/other-acme/DemoExample.java
你还可以添加一个新目录,只要完整的相对路径是唯一的。
故障排除
并非所有更改文件的指标都显示
如果你从相同的源分支创建了一个新的合并请求,但目标分支不同,指标可能无法正确显示。
该任务不会考虑新的合并请求中的差异,也不会显示不在其他合并请求差异中的文件的任何指标。即使生成的覆盖率报告中包含指定文件的指标,也会发生这种情况。
要解决此问题,请等到创建新的合并请求后,再重新运行你的流水线或启动一个新的流水线。然后会考虑新的合并请求。