不同的 jacoco 覆盖导致 github 操作环境

Posted

技术标签:

【中文标题】不同的 jacoco 覆盖导致 github 操作环境【英文标题】:Different jacoco coverage results in a github action environment 【发布时间】:2021-12-28 16:53:09 【问题描述】:

jacoco 覆盖率报告在 CI 环境中运行时是否会产生不同的结果?

我在迁移到 Java 17 后出现以下情况。当我运行 ./gradlew clean build 时,会生成报告并且 jacocoTestCoverageVerification 不会失败。

但是当在 github 运行器中执行相同的命令时,我得到了非常不同的结果,覆盖率报告也使用不同的覆盖率值创建,并且某些类只是未能通过覆盖率验证。

很遗憾,我无法提供代码 sn-ps,但我已经尝试过:

在我的机器上运行 github runner,使用相同的 jdk,如果我只是在命令行中运行构建,它会产生不同的结果:( 为测试任务添加 jvmargs noverify 在容器而不是自托管中运行 github 操作,结果相同 其他开发人员也在不同的机器上构建了该项目而没有错误 运行与 ci 相同的构建命令

所以似乎 github action env 中的某些东西会产生这种行为。

版本:

jacoco 插件:0.8.7 gradle 7.3 Java 17

【问题讨论】:

你能分享你的工作流程吗? “覆盖验证失败”是什么意思? 当然,我们将 jacocoTestCoverageVerification 配置为 0.8 左右。在本地构建我得到了不同的覆盖率报告,构建没有失败,这在 github 操作环境中不会发生。我还检查了生成的覆盖率报告,似乎 ci 生成的报告比本地构建分析的包更多,可能正因为如此,覆盖率不同。但我不知道为什么会这样。 【参考方案1】:

这里的问题是 lombok 配置文件。原来兼容java 17和Gradle 7.3的新版lombok插件不再生成lombok.config文件了。

在以前的版本中,这些文件是由io.freefair.lombok 插件生成的,我们将它们放在.gitignore 中。因此,本地构建工作得很好,因为文件仍然存在。

通过查看生成的报告,我意识到了这一点,我注意到 lombok 类仅由 CI 分析。

在其他情况下,类似的问题可能与此有关: https://www.eclemma.org/jacoco/trunk/doc/classids.html

【讨论】:

以上是关于不同的 jacoco 覆盖导致 github 操作环境的主要内容,如果未能解决你的问题,请参考以下文章

将 Jacoco 代码覆盖率发布到声纳的命令

单元测试-代码覆盖率工具 -- JaCoCo

精准测试与开源工具Jacoco的覆盖率能力大P

如何从android项目中的jacoco测试覆盖率报告中排除方法

结合声纳的 Jacoco 测试覆盖率

Sonar是否使用Jacoco插件进行代码覆盖