使用 TeamCity 将 jacoco 覆盖率报告提供给 SonarQube,但它显示 0% 的覆盖率
Feed jacoco coverage report to SonarQube using TeamCity but it shows 0% coverage
我有一个 gradle 项目,其中一些代码在 src/main/java
中,一些单元测试在 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 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% 的覆盖率。如果我向 SonarQube(版本 6.7)
正确提供 jacoco
覆盖率报告,请告诉我
如果您正在为 Gradle runner 使用 TeamCity JaCoCo 集成,覆盖范围应该是自动的。确保您在 SonarQube Runner 中提供了 "Binaries location:"。在这种情况下,构建日志将包含这样的行:
# 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 项目,其中一些代码在 src/main/java
中,一些单元测试在 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 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% 的覆盖率。如果我向 SonarQube(版本 6.7)
正确提供jacoco
覆盖率报告,请告诉我
如果您正在为 Gradle runner 使用 TeamCity JaCoCo 集成,覆盖范围应该是自动的。确保您在 SonarQube Runner 中提供了 "Binaries location:"。在这种情况下,构建日志将包含这样的行:
# 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" 属性