SonarQube 未显示 Gradle 多项目中 JUnit 测试的测试 Jacoco 覆盖率

Jen*_*ich 2 code-coverage gradle jenkins jacoco sonarqube

我想展示使用 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'
}
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

构建的结果显示错误: INFO: parsing [/home/jenkins/workspace/issue-prioritizer/coverage-reports/coverage.xml] ERROR: Reports path not find or is not a directory: /home/jenkins/workspace /问题优先级/覆盖率报告/coverage.xml

我看到每个项目都有一个生成的 ${buildDir}/coverage-reports/coverage.xml 文件,但根文件是空的,这是预期的,因为我没有配置与此相关的任何内容。

在某个时刻,我添加了一项复制任务,该任务将一个项目中生成的 xml 文件之一复制到根文件夹中,但构建作业抱怨类不匹配。

有谁知道这个问题如何解决?我假设我必须添加一个配置来添加根coverage.xml 文件,该文件是各个文件的聚合,但我还没有找到解决方案。

我还尝试将 jacoco 应用于根项目,但也失败了,因为根项目不是 Java 项目。

小智 6

需要生成xml格式的报告。将声纳属性添加到 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"
        }
}
Run Code Online (Sandbox Code Playgroud)

使用 jacocoTestReport 运行 gradle 命令

gradlew sonarqube jacocoTestReport
Run Code Online (Sandbox Code Playgroud)