我已经使用 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 }}
`