我在 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/