【问题标题】:Feed jacoco coverage report to SonarQube using TeamCity but it shows 0% coverage使用 TeamCity 将 jacoco 覆盖率报告提供给 SonarQube,但它显示 0% 的覆盖率
【发布时间】:2023-03-17 02:51:01
【问题描述】:

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

下面是 build.gradle

中的 sn-p
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 clean jacocoTestReport build 的 Gradle 步骤,第二步是具有以下参数的 SonarQube runner

-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),请告知我

【问题讨论】:

  • 您查看过 SonarQube 日志文件吗?
  • @JeroenHeier 我看不到日志,因为我无法控制那个 SonarQube 服务器(它由另一个团队管理)
  • 分析日志告诉你什么?为什么不使用 SonarQube 扫描仪进行 gradle 呢?如果我是正确的,SonarRunner 已被弃用,您无论如何都应该使用声纳扫描仪。
  • @benzonico Sonar Runner 是 TeamCity 中的专用构建步骤。
  • 另外,SonarQube 服务器的管理员会阻止任何本地分析结果直接推送到服务器

标签: gradle sonarqube teamcity code-coverage jacoco


【解决方案1】:

如果您为 Gradle 运行器使用 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”属性

【讨论】:

  • 嗨@linfar,我可以检查一下二进制文件的位置,它是编译类的位置还是检测类的位置?
  • @hydradon 我从来没有在离线模式下运行 JaCoCo。 Documentation 表示您必须针对初始编译的类,而不是检测。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
相关资源
最近更新 更多