如何让Jenkins,Sonar和JaCoCo插件为Eclipse Tycho插件项目(或者Cobertura)一起工作?

时间:2012-01-20 16:01:18

标签: jenkins sonarqube cobertura tycho jacoco

我的设置是:

  • Jenkins 1.448
  • Sonar 2.13
  • Jenkins Sonar Plugin 1.72
  • Sonar的MySql数据库

我有以下项目:

  • Eclipse插件项目
  • 使用Maven
  • 多个模块(父maven项目,源插件项目,测试片段项目)
  • 一个简单的JUnit测试,测试一个源插件项目的类

目前的流程是什么:

  • Jenkins从SVN检出父项目
  • Jenkins使用Maven和Tycho构建项目及其模块
  • Jenkins使用Surefire执行测试并生成报告
  • Jenkins使用Jenkins Sonar插件启动mvn声纳:声纳执行代码分析
  • 对每个模块进行静态代码分析
  • JaCoCo失败

Sonar具有可用的静态代码分析统计信息,并显示测试成功百分比。 唯一缺少的是JaCoCo的代码覆盖......甚至可能是Cobertura的代码覆盖率。

我现在并不在意,我只想要其中一件事来产生代码覆盖率。

科贝特拉似乎无法产生结果,可能是因为其中之一    - 它无法检测代码    - 它在错误的地方查找已检测的代码    - 它无法应对Tycho或单独的源/测试代码设置

JaCoCo应该能够动态“观察”代码覆盖率,但其输出是

[INFO] [17:44:04.708] Sensor JaCoCoSensor...
[INFO] [17:44:04.717] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/jobs/testPlugin/workspace/testSource/target/jacoco.exec
[INFO] [17:44:04.854] Sensor JaCoCoSensor done: 146 ms

[INFO] [17:44:10.587] Sensor JaCoCoSensor...
[INFO] [17:44:10.587] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/jobs/testPlugin/workspace/testTest/target/jacoco.exec
[INFO] [17:44:10.631] Sensor JaCoCoSensor done: 44 ms

[INFO] [17:44:12.402] Sensor JaCoCoSensor...
[INFO] [17:44:12.402] Project coverage is set to 0% as build output directory doesn't exists: /var/lib/jenkins/jobs/testPlugin/workspace/testParent/target/classes
[INFO] [17:44:12.402] Sensor JaCoCoSensor done: 0 ms

我做错了什么?我需要在我的pom.xml中启用JaCoCo吗?我需要确定吗?使用Cobertura需要做什么?

3 个答案:

答案 0 :(得分:3)

我找到了一个包含示例tycho多模块项目的页面(单独的源代码和测试项目)。复制了一些属性和配置后......

似乎我现在使用maven jacoco插件生成jacoco代码覆盖率报告,然后告诉Sonar在哪里找到报告并重复使用。

为什么到目前为止没有相关文档?或者为什么这么难找?

https://github.com/Godin/sonar-experiments/tree/master/jacoco-examples/tycho-example

答案 1 :(得分:3)

答案 2 :(得分:0)

当代码完成检测时,必须在检测生成的特定代码上运行surefire。我没有使用过您的设置,但是您的错误与我在获取Clover代码覆盖率时的错误非常相似;我不得不指出surefire从存储编译的检测代码的目录中运行测试。

此外,我发现在Maven命令行中指定-X选项是非常宝贵的,因为在构建期间读取每个插件的日志会显示它正在寻找它正在寻找的任何内容。

编辑:

必须在surefire可以针对它运行之前编译检测代码,因此您需要指向编译后目录而不是检测源本身。