gradle - 使用 TeamCity 向 SonarQube 提供 jacoco 覆盖率报告,但它显示 0% 的覆盖率

标签 gradle sonarqube teamcity code-coverage jacoco

我在 src/main/java 中有一个带有一些代码的 gradle 项目以及 src/test/java 中的一些单元测试

以下是来自 的片段build.gradle

apply plugin: "jacoco"

sourceSets {
    main {
        java { srcDir 'src/main/java' }
    }
}

test {
    jacoco {
        append = false
        destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
        classDumpDir = file("$buildDir/jacoco/classpathdumps")
    }
}

jacoco {
    toolVersion = "0.7.8"
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false
        html.destination "${buildDir}/reports/jacoco/jacocoHtml"
    }
}

在 TeamCity 上,我有 2 个步骤,首先是 Gradle 步骤,使用命令 gradle clean jacocoTestReport build第二步是 SonarQube 运行者 具有以下参数:
-Dsonar.sources=%system.teamcity.build.checkoutDir%/src
-Dsonar.java.binaries=%system.teamcity.build.checkoutDir%/build/classes
-Dsonar.branch.name=%teamcity.build.branch%
-Dsonar.jacoco.reportPaths=%system.teamcity.build.checkoutDir%/build/jacoco/jacocoTest.exec

但是,在 SonarQube 仪表板上,我的项目仍然显示 0% 覆盖率 .如果我喂食请告诉我jacoco覆盖率正确报告给 SonarQube(版本 6.7)

最佳答案

如果您为 Gradle runner 使用 TeamCity JaCoCo 集成,则覆盖范围应该是自动的。确保您在 SonarQube Runner 中提供了“二进制文件位置:”。在这种情况下,构建日志将包含以下行:

 # before SonarQube start:
 -Dsonar.java.coveragePlugin=jacoco
 -Dsonar.jacoco.reportPath=/.../buildAgent/temp/buildTmp/JACOCO8457480821230827929coverage/jacoco.exec

 # while SonarQube is executed:
 Sensor JaCoCoSensor
 Analysing /.../buildAgent/temp/buildTmp/JACOCO8457480821230827929coverage/jacoco.exec

如果您想在 Gradle 脚本中使用 JaCoCo 插件,您应该在 SonarQube Runner 步骤中手动设置覆盖类型和数据位置
-Dsonar.java.coveragePlugin=jacoco
-Dsonar.jacoco.reportPaths=%system.teamcity.build.checkoutDir%/build/jacoco/jacocoTest.exec

所以尝试添加“sonar.java.coveragePlugin”属性

关于gradle - 使用 TeamCity 向 SonarQube 提供 jacoco 覆盖率报告,但它显示 0% 的覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47523010/

相关文章:

android - 无法在Android上访问Google map

java - 为什么gradle使用2个本地缓存?

c++ - Sonarqube 如何理解分支覆盖

c# - 如何调试从 TeamCity 部署的 nuget 包?

java - Gradle项目共享人工插件依赖

android - 如何将应用程序 key 存储在本地单独的文件中并从那里加载到 build.gradle 中?

azure-devops - 将 sonarqube 分析与 Ci 构建集成的问题

sonarqube - Sonar 预览模式所有新问题

teamcity - 如何使用 dotCover 从 TeamCity 覆盖范围中通过掩码 *.Tests.dll 排除程序集?

ant - TeamCity:如何在 ANT 中启用 FTP?