如何使用Jacoco和多个模块在Jenkins中进行代码覆盖?

时间:2017-02-16 05:39:16

标签: jenkins code-coverage jacoco

我的代码结构如下:

  

事件
  消息
  其他代码
  官能试验

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

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

以下是步骤:

  1. 将项目建设为Jenkins的工作
  2. 将其部署到用户阶段
  3. 在Jenkins中运行jacoco报告工作
  4. Jacoco报告工作说明:

    1. 构建步骤 - maven 3.3.3 目标 - 清洁测试 和testsuite,用户阶段的详细信息和其他信息传递。

    2. 发布步骤 - 执行shell

      无法在此处进行格式化和粘贴,因此请在此处上传:https://zerobin.net/?8a988cd05bf3d752#fbzMlW1b7uzD+HZnmwnd9WjQYBI3j95Q7DCIx6q+l0U=

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

    4. shell粘贴中使用的clasDir变量应该有类。到目前为止,我已经在shell脚本的开头做了这个。

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

      并设置clsDir = target/classes

      这样我得到了关于该模块的报告。我的测试套件只包含一个类。我想要包括其他模块,例如eventsother-code,也可以链接来源。

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

      编辑:

      答案:以下答案有所帮助,但是所有这些都是用shell命令完成的,而不是任何UI。因此,克隆存储库,执行mvn clean package -DskipTests并复制所有模块文件夹中的所有第一级子文件夹有帮助,但随后显示错误覆盖类文件的执行数据不匹配。这意味着我们用于覆盖的类和我们用于覆盖的类是由不同的JVM(一个在Jenkins中,另一个在舞台中部署)单独构建的。

      因此,解决方案是不克隆并重新编译它们,而是从部署存储库下载清单并解压缩所有jar。这样我就拥有了相同版本的所有类。

1 个答案:

答案 0 :(得分:5)

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

例如,如果您想在目录' events'中包含任何类。和'其他代码',您可以将以下内容添加到类目录的路径'部分:

**/events,**/other-code

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

这是我工作的JaCoCo插件配置:Example JaCoCo Plugin Configuration

编辑如评论中所述,此问题的一个解决方案是利用您正在处理的任何构建工具(Ant,Maven,Gradle)来删除target(即: jar,war等)进入一个公共目录,然后将jacoco插件指向那里。