Jenkins SonarQuo不会显示Gradle多项目中JUnit测试的测试Jacoco覆盖率
我想展示使用Gradle 6.0构建的多项目Spring boot应用程序的测试覆盖率。我们目前使用JUnit5 即使存在一些最初的测试,SonarQube中的测试覆盖率仍为0% 顶级项目中的build.gradle文件具有以下输入:Jenkins SonarQuo不会显示Gradle多项目中JUnit测试的测试Jacoco覆盖率,jenkins,gradle,sonarqube,code-coverage,jacoco,Jenkins,Gradle,Sonarqube,Code Coverage,Jacoco,我想展示使用Gradle 6.0构建的多项目Spring boot应用程序的测试覆盖率。我们目前使用JUnit5 即使存在一些最初的测试,SonarQube中的测试覆盖率仍为0% 顶级项目中的build.gradle文件具有以下输入: plugins { id "org.sonarqube" version "2.7" id 'jacoco' } repositories { jcenter() } subprojects { apply plugin: 'j
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文件复制到根文件夹中,但构建作业抱怨类不匹配
有人知道如何解决这个问题吗?我假设我必须添加一个配置来添加一个root coverage.xml文件,该文件是各个文件的集合,但我还没有找到解决方案
我还尝试将jacoco应用于根项目,但也失败了,因为根项目不是Java项目。我通过将顶级build.gradle更改为:
plugins {
// id "org.sonarqube" version "2.7"
id 'jacoco'
}
repositories {
jcenter()
}
subprojects {
println name;
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
}
}
ext {
springBootVersion = '2.1.1.RELEASE'
}
sourceCompatibility = 1.8
}
// run the build with ./gradlew clean build generateMergedReport
task generateMergedReport(type: JacocoReport) {
dependsOn = subprojects.test
additionalSourceDirs.setFrom files(subprojects.sourceSets.main.allSource.srcDirs)
sourceDirectories.setFrom files(subprojects.sourceSets.main.allSource.srcDirs)
classDirectories.setFrom files(subprojects.sourceSets.main.output)
executionData.setFrom project.fileTree(dir: '.', include: '**/build/jacoco/test.exec')
println executionData;
reports {
xml.enabled true
xml.destination file("../coverage-reports/coverage.xml")
}
}
wrapper {
gradleVersion = '6.0'
}
并将Jenkins更改为构建generateMergedReport:
cd server && ./gradlew build generateMergedReport
将属性更改为以下内容:
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
不幸的是,SonarQube仍然找不到coverage.xml文件
INFO: parsing [/home/jenkins/workspace/issue-prioritizer/coverage-reports/coverage.xml]
ERROR: Reports path not found or is not a directory: /home/jenkins/workspace/issue-prioritizer/coverage-reports/coverage.xml
有人知道缺少什么吗?需要以xml格式生成报告。将sonar属性添加到xml路径,如下所示
jacocoTestReport {
reports {
xml.enabled true
}
}
sonarqube {
properties {
property "sonar.java.source", "1.8"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.jacoco.reportPaths", "build/reports/jacoco/test/jacocoTestReport.xml"
}
}
使用jacocoTestReport运行gradle命令
gradlew sonarqube jacocoTestReport
我在您的配置中看到sonar.coverage.jacoco.xmlReportsPath指向jacoco的.exec二进制报告文件,而此属性应指向文档中指定的xml报告路径:谢谢,我将更改路径。不幸的是,这并没有解决问题,根coverage.xml文件没有创建。