在jenkin构建之后,Sonar没有显示代码覆盖率

时间:2015-08-18 21:11:55

标签: maven jenkins sonarqube jacoco-maven-plugin

我们有一个多模块maven项目。我们使用 jacoco 进行代码覆盖分析。我准备了pom文件来运行测试用例并获取代码覆盖率。当我在本地构建项目时,我可以在声纳仪表板上看到代码覆盖率

将更改推送到github后,当jenkins构建被触发时,声纳仪表板上没有代码覆盖率。我在jenkins构建日志中发现了以下错误:

  

未收集覆盖范围信息。也许您忘记将调试信息包含在已编译的类中?

如何在成功构建jenkins之后使代码覆盖率可用?

1 个答案:

答案 0 :(得分:0)

您必须确保在编译Java或Groovy等代码时启用调试选项。我使用Gradle(而不是Maven)并启用调试选项,我在 Gradle 中执行类似的操作。您可以将以下代码放在项目的build.gradle或顶级$ GRADLE_HOME / init.d / some-global.gradle文件中(在allprojects {...}部分内)。

   tasks.withType(JavaCompile) {
     options.debug = true
     options.compilerArgs = ["-g"]
   }

   tasks.withType(GroovyCompile) {
        options.debug = true
   }

在Maven中做同样的事情(如何使用-g为Java启用调试选项,对于基于Groovy的项目使用true)。

在此之后,您需要的是确保在调用sonar runner时正确设置sonar.xx.yyy变量(即Gradle中的sonarRunner任务)。

我将这些变量设置为(UT用于单元测试,IT用于集成测试)。仅当您将jacocoagent.jar附加到运行应用程序的.war / .ear文件的Tomcat /外部JVM(而不是Gradle / Maven JVM)时,才会生成IT代​​码覆盖率。

-Dsonar.jacoco.itReportPath=build/jacoco/IT/jacocoIT.exec 
-Dsonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec

您可以在线/文档中看到其他sonar.xx.yy变量。

在Maven中,您可以使用以下命令启用Java调试:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <debug>true</debug>
        <debuglevel>lines,vars,source</debuglevel> 
    </configuration>
  </plugin>
相关问题