【发布时间】:2020-01-09 15:05:15
【问题描述】:
我想展示使用 Gradle 6.0 构建的多项目 Spring Boot 应用程序的测试覆盖率。我们目前使用 JUnit5。
即使存在一些首次测试,SonarQube 中的测试覆盖率仍为 0%。
顶级项目 (https://github.com/OpenReqEU/eclipse-plugin-vogella/blob/master/server/build.gradle) 中的 build.gradle 文件具有以下输入:
plugins {
id "org.sonarqube" version "2.7"
id 'jacoco'
}
repositories {
jcenter()
}
subprojects {
apply plugin: 'jacoco'
apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
jcenter()
maven { url 'https://repo.spring.io/snapshot' }
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
}
jacocoTestReport {
reports {
xml.enabled true
xml.destination file("${buildDir}/coverage-reports/coverage.xml")
//html.destination file("${buildDir}/coverage-reports")
}
}
ext {
springBootVersion = '2.1.1.RELEASE'
}
sourceCompatibility = 1.8
}
wrapper {
gradleVersion = '6.0'
}
在 Jenkins 构建中,我们设置了以下参数:
sonar.projectKey=eclipse-plugin-vogella
sonar.sources=server/com.vogella.prioritizer.server/src/main,server/com.vogella.prioritizer.server.bugzilla/src/main,server/com.vogella.prioritizer.server.issue.api/src/main
sonar.java.binaries=com.vogella.prioritizer.server/build/classes/java/main,com.vogella.prioritizer.server.bugzilla/build/classes/java/main,com.vogella.prioritizer.server.issue.api/build/classes/java/main
sonar.tests=server/com.vogella.prioritizer.server/src/test,server/com.vogella.prioritizer.server.bugzilla/src/test
sonar.coverage.jacoco.xmlReportsPath=server/com.vogella.prioritizer.server.bugzilla/build/jacoco/test.exec,server/com.vogella.prioritizer.server/build/jacoco/test.exec,server/com.vogella.prioritizer.server.issue.api/build/jacoco/test.exec
构建结果显示错误: 信息:解析 [/home/jenkins/workspace/issue-prioritizer/coverage-reports/coverage.xml] 错误:找不到报告路径或不是目录:/home/jenkins/workspace/issue-prioritizer/coverage-reports/coverage.xml
我看到每个项目都有一个生成的 ${buildDir}/coverage-reports/coverage.xml 文件,但是根文件是空的,这是预料之中的,因为我没有配置与此相关的任何内容。
在某个时候,我添加了一个复制任务,它将一个项目中生成的 xml 文件之一复制到根文件夹中,但构建作业抱怨类不匹配。
有人知道如何解决这个问题吗?我假设我必须添加一个配置来添加一个根 coverage.xml 文件,该文件是单个文件的集合,但我还没有找到解决方案。
我也尝试将 jacoco 应用于根项目,但也失败了,因为根项目不是 Java 项目。
【问题讨论】:
-
我在您的配置中看到
sonar.coverage.jacoco.xmlReportsPath指向 jaCoCo 的.exec二进制报告文件,而此属性应指向文档中指定的xml报告路径:docs.sonarqube.org/display/PLUG/JaCoCo+Plugin -
谢谢,我改一下路径。
-
不幸的是,这并没有解决问题,根 coverage.xml 文件没有被创建。
标签: jenkins gradle sonarqube code-coverage jacoco