我们有一个多模块maven项目。我们使用 jacoco 进行代码覆盖分析。我准备了pom文件来运行测试用例并获取代码覆盖率。当我在本地构建项目时,我可以在声纳仪表板上看到代码覆盖率。
将更改推送到github后,当jenkins构建被触发时,声纳仪表板上没有代码覆盖率。我在jenkins构建日志中发现了以下错误:
未收集覆盖范围信息。也许您忘记将调试信息包含在已编译的类中?
如何在成功构建jenkins之后使代码覆盖率可用?
答案 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>