配置Jacoco后SonarQube代码覆盖率仍为0%的问题求助
问题:GitHub Actions自托管Runner执行Sonar扫描时覆盖率始终为0%
我已按照Jacoco和SonarQube官方文档完成配置,Sonar服务器部署在自托管Runner上。Sonar UI中sonar.coverage.jacoco.xmlReportPaths参数留空(默认路径为target/site/jacoco/jacoco.xml),本地执行mvn test时能在对应路径生成XML报告及HTML覆盖率页面。但通过GitHub Actions的自托管Runner执行扫描时,Sonar UI可识别新增代码,代码覆盖率却始终显示0%。我曾尝试在pom.xml和Sonar GUI中指定报告路径,问题仍未解决,且无报错日志,Sonar容器日志显示覆盖率计算步骤执行成功。
工作流文件
name: SonarQube on: workflow_dispatch: pull_request: jobs: scanning: runs-on: self-hosted steps: - name: Checkout repo uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up JDK 21 uses: actions/setup-java@v1 with: java-version: 21 - name: Configure Maven settings uses: whelk-io/maven-settings-xml-action@v22 with:...... - name: Cache Maven packages uses: actions/cache@v1 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - name: Build and analyze env: SONAR_TOKEN: ${{ ... }} SONAR_HOST_URL: ${{ ... }} run: mvn -B verify -DskipTests org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=... -Dsonar.projectName='...'
pom.xml中的Jacoco插件配置
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>
pom.xml中的属性配置
<jacoco.version>0.8.10</jacoco.version> <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
pom.xml中的Jacoco依赖
<dependency> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> </dependency>
Sonar容器日志片段
2024.05.06 10:44:06 INFO ce[b5aba757-5a3e-4285-bddc-eda685e8126e][o.s.c.t.s.ComputationStepExecutor] Compute new coverage | status=SUCCESS | time=34ms 2024.05.06 10:44:06 INFO ce[b5aba757-5a3e-4285-bddc-eda685e8126e][o.s.c.t.s.ComputationStepExecutor] Compute coverage measures | status=SUCCESS | time=1ms 2024.05.06 10:44:06 INFO ce[b5aba757-5a3e-4285-bddc-eda685e8126e][o.s.c.t.s.ComputationStepExecutor] Compute comment measures | status=SUCCESS | time=0ms
相关截图


排查建议
- 移除
-DskipTests参数:扫描命令中添加的-DskipTests会跳过测试执行,Jacoco的覆盖率数据依赖测试阶段生成,跳过测试自然不会产生有效报告。建议调整命令为mvn -B test org.sonarsource.scanner.maven:sonar-maven-plugin:sonar ...。 - 统一Jacoco版本:pom.xml中插件版本为0.8.10,依赖版本为0.8.11,版本不一致可能引发兼容性问题,建议统一为同一版本。
- 验证自托管Runner上的报告生成:在工作流中添加步骤,执行
ls -la target/site/jacoco/,确认jacoco.xml文件是否存在,排除报告未生成的情况。 - 明确指定Sonar报告路径:在Sonar扫描命令中添加
-Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml,强制指定报告路径,避免路径识别偏差。 - 检查Maven生命周期执行顺序:确保
test阶段在Sonar扫描前执行,可拆分命令为mvn test+mvn sonar:sonar,分步验证各阶段执行结果。
内容的提问来源于stack exchange,提问作者Ksushant881
相关产品推荐
相关产品推荐

