不同的 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 操作环境的主要内容,如果未能解决你的问题,请参考以下文章