SonarCloud代码覆盖率在GitHub Actions构建中仍然为0.0

问题描述 投票:0回答:1

我已经使用GitHub Actions为.NET Core解决方案设置了CI。将代码推送到主分支时,将构建解决方案,运行单元测试,并使用SonarCloud运行代码分析。代码分析步骤实际上是由sonarcloud-github-action执行的。

SonarCloud中的质量门未通过,因为覆盖率是0.0%(对于两个新的现有代码)。我正在使用Coverlet生成代码覆盖率报告。在执行每个单元测试项目的测试后,会成功生成coverage.opencover.xml文件。在sonar-project.properties文件中,我按如下方式引用这些文件:

sonar.cs.opencover.reportsPaths=**\coverage.opencover.xml

但是显然,SonarCloud扫描程序可以识别但不处理代码覆盖率报告。在我的GitHub Actions工作流程的日志中,确实看到了以下警告:

INFO: Parsing the OpenCover report <path>/coverage.opencover.xml INFO: Adding this code coverage report to the cache for later reuse: <path>/coverage.opencover.xml ... WARN: Missing blame information for the following files: WARN: * <path>/coverage.opencover.xml WARN: This may lead to missing/broken features in SonarQube

[在尝试解决“缺少责任的信息”警告时,我将覆盖率文件添加到了SonarCloud项目中的排除项:**/coverage.opencover.xml,但这并不能解决问题。该警告仍然出现,并且代码覆盖率仍然为0.0%。

是否有任何建议可以解决?

[编辑]:

我在GitHub Actions中的工作流程如下:

name: .NET Core
on: [push]

jobs:
  build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- name: Setup .NET Core
  uses: actions/setup-dotnet@v1
  with:
    dotnet-version: 2.2.108
- name: Build with dotnet
  run: dotnet build src/<solution>.sln --configuration Release
- name: Unit Tests
  run: dotnet test src/<solution>.sln /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
- name: SonarCloud Scan
  uses: sonarsource/sonarcloud-github-action@master
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

`

sonarqube code-coverage sonarqube-scan github-actions sonarcloud
1个回答
0
投票

我在使Typescript项目的覆盖范围正常工作时遇到了类似的问题。没有声纳记录,我只能猜测,但问题是lcov.info内部的路径,其中来自github之类的绝对路径(例如SF:/home/runner/work/YoutRepoName..和Sonar)正在启动Docker容器并将wo​​rkdir设置为/github/workdir,因此无法定位lcov.info中的文件。

检查您的日志,是否找到类似的东西

2019-11-28T15:36:34.9243068Z WARN: Could not resolve 2 file paths in [/github/workspace/test/unit/coverage/lcov.info], first unresolved path: /home/runner/work/jobreporter/jobreporter/dispatcher/index.ts
2019-11-28T15:36:34.9243445Z INFO: Sensor SonarJS Coverage [javascript] (done) | time=8ms

所以暂时我不得不用/github/workdir替换locv.info中的所有文件夹名称。

就我而言,我使用过

    - name: 'Run npm lint and test'
      shell: bash
      run: |
        pushd .
        npm ci
        npm run lint:ci
        npm run test --if-present
        sed -i 's+/home/runner/work/jobreporter/jobreporter+/github/workspace+g' test/unit/coverage/lcov.info
        sed -i 's+/home/runner/work/jobreporter/jobreporter+/github/workspace+g' eslint-report.json

此后,正确报告了覆盖范围。也许有帮助

关于Mathias

© www.soinside.com 2019 - 2024. All rights reserved.