You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Action中PHP项目SonarQube代码覆盖率始终为0%问题

解决SonarQube无法识别PHPUnit覆盖率报告的问题

根据你提供的日志和配置,核心问题是SonarQube找不到PHPUnit生成的coverage.xml文件,导致覆盖率显示为0%。以下是针对性的解决方案:

1. 先确认coverage.xml是否存在且路径正确

在SonarQube扫描步骤前,添加检查文件的步骤,验证文件是否生成在预期位置:

- name: 检查覆盖率文件是否存在
  run: |
    ls -la coverage.xml
    # 可选:查看文件内容确认是否有效
    cat coverage.xml

如果这一步提示文件不存在,说明PHPUnit没有成功生成报告,需要检查PHPUnit的配置(比如phpunit.xml里是否启用了覆盖率,或者测试是否真的执行了)。

2. 修正SonarQube扫描的参数格式

你当前的args写法使用了YAML折叠符号>,可能导致参数解析异常。改成直接传递参数的形式:

- name: SonarQube Scan
  uses: SonarSource/sonarqube-scan-action@master
  with:
    args: "-Dsonar.php.coverage.reportPaths=coverage.xml"
  env:
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
    SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}

3. 明确指定SonarQube的项目根目录

如果你的项目结构有子目录,或者SonarQube默认的项目根目录不是当前工作目录,需要显式指定:

- name: SonarQube Scan
  uses: SonarSource/sonarqube-scan-action@master
  with:
    args: >-
      -Dsonar.projectBaseDir=.
      -Dsonar.php.coverage.reportPaths=coverage.xml
  env:
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
    SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}

sonar.projectBaseDir=.表示以当前工作目录作为项目根目录,确保SonarQube能找到相对路径下的coverage.xml。

4. 检查PHPUnit生成的报告格式

确保PHPUnit生成的coverage.xml是标准的Clover格式。可以在本地执行vendor/bin/phpunit --coverage-clover=coverage.xml,然后查看文件内容是否包含<coverage>标签,且里面有具体的覆盖率数据。如果报告为空,说明你的测试没有覆盖任何代码,需要调整测试用例。

5. 验证SonarQube PHP插件版本兼容性

如果你的SonarQube版本较旧,可能不兼容新版本PHPUnit生成的覆盖率报告。建议将SonarQube的PHP插件升级到最新版本,或者确认插件支持当前PHPUnit的版本。

内容的提问来源于stack exchange,提问作者Tara Prasad Gurung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:25:30