【问题标题】:How to have code coverage in Jenkins with Jacoco and multiple modules?如何在 Jenkins 中使用 Jacoco 和多个模块进行代码覆盖?
【发布时间】:2017-07-05 02:03:02
【问题描述】:

我的代码结构如下:

活动
留言
其他代码
功能测试

在 jacoco 的构建脚本中,首先它必须复制所有类并使用该类目录来运行该工具。您能否在此处描述目标目录的步骤。我的意思是如何提及运行代码覆盖的目录。

在构建时,每个文件夹都有自己的目标文件夹,其中包含类。

步骤如下:

  1. 在 Jenkins 中将项目构建为工作
  2. 将其部署到用户阶段
  3. 在 Jenkins 中运行 jacoco 报告作业

Jacoco 汇报工作说明:

  1. 构建步骤 - maven 3.3.3 目标 - 干净的测试 并且测试套件、用户阶段详细信息和其他信息都通过了。

  2. 发布步骤 - 执行 shell

    这里无法格式化粘贴,所以在这里上传:https://zerobin.net/?8a988cd05bf3d752#fbzMlW1b7uzD+HZnmwnd9WjQYBI3j95Q7DCIx6q+l0U=

  3. 调用顶级 maven 目标 - maven 3.3.3 -f jacoco_pom.xml jacoco:dump antrun:run@report

shell 粘贴中使用的clasDir 变量应该有类。到目前为止,我已经在 shell 脚本的开头完成了这项工作。

mkdir -p target/classes
cp -R messages/target/classes target/classes

并设置clsDir = target/classes

这样我就得到了关于那个模块的报告。我的测试套件只包含一个类。我还想包含其他模块,例如 eventsother-code 并链接源代码。

我需要有关如何设置的帮助。主要目的是生成功能测试的代码覆盖率报告。

编辑:

答案:下面的答案有所帮助,但这一切都是通过 shell 命令而不是任何 UI 来完成的。因此,克隆 repo,执行mvn clean package -DskipTests 并从所有模块文件夹中复制所有第一级子文件夹有所帮助,但随后它显示覆盖错误类文件的执行数据不匹配。这意味着检测的类和我们用于覆盖的类是由不同的 JVM 分别构建的(一个在 Jenkins 中,另一个在阶段部署)。

因此解决方案是不克隆并重新编译它们,而是从部署存储库下载清单并解压缩所有 jar。这样我所有的课程都在同一个版本中。

【问题讨论】:

  • 您指的是一些“构建脚本”,但 IMO 不清楚这意味着什么 - 有许多不同的构建工具,并且有很多方法可以执行 JaCoCo,具体取决于构建工具 - Maven 插件、Ant任务等。所以你能否澄清你的问题,最好用一个更干净的例子 - 见stackoverflow.com/help/mcve
  • 请立即查看。

标签: jenkins code-coverage jacoco


【解决方案1】:

要通过更改 Jenkins JaCoCo 插件配置来包含多个类目录,您需要修改“类目录路径”字段。

例如,如果您想在“事件”和“其他代码”目录下包含任何类,您可以将以下内容添加到“类目录路径”部分:

**/events,**/other-code

请记住,如果您想添加多个目录,您必须用逗号分隔每个目录,并且不能有空格(由于插件的错误)。注意:此插件配置中的所有文本字段都存在此逗号错误。

这是我的 JaCoCo 插件配置:

编辑: 如 cmets 中所述,解决此问题的一种方法是利用您正在处理的任何构建工具(Ant、Maven、Gradle)删除 target(即:jar,战争等)到一个公共目录,只需将 jacoco 插件指向那里。

【讨论】:

  • 它在某种程度上有所帮助。谢谢提示。我所做的是运行 mvn 目标以进行干净构建,然后将每个模块的 target 复制到一个名为 classes 的公共目录中,这样所有类都位于一个公共位置,jacoco 在分析覆盖率时可以引用该位置.
  • 如果您使用管道和 Jenkinsfile,请参阅:stackoverflow.com/a/48685604/1279002
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 2012-09-29
  • 1970-01-01
  • 2013-02-15
  • 2017-10-10
  • 2014-10-03
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多