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

在GitHub Actions中为.NET项目添加代码覆盖率质量门禁

实现代码覆盖率低于阈值时终止GitHub Actions构建

针对你的需求,提供两种可行的实现方案,你可以根据场景选择:

方案一:直接通过Coverlet在测试阶段强制检查覆盖率

这种方式无需依赖SonarQube,在执行测试时直接判断覆盖率,低于阈值则让测试命令失败,从而终止整个构建流程。

修改GitHub Actions中的dotnet test步骤

将原测试步骤的命令更新为以下内容,添加覆盖率阈值检查参数:

dotnet test ".\JK.Test\JK.Test.csproj" `
  --configuration Release `
  --results-directory "${{ github.workspace }}\TestResults" `
  /p:CollectCoverage=true `
  /p:CoverletOutputFormat=opencover `
  /p:CoverletOutput=".\JK.Test\coverage" `
  /p:Threshold=70 `
  /p:ThresholdType=line `
  /p:ThresholdFailBuild=true

参数说明:

  • Threshold=70:设置覆盖率阈值为70%
  • ThresholdType=line:基于行覆盖率进行判断(也可选择branch、method等其他类型)
  • ThresholdFailBuild=true:当覆盖率低于阈值时,让测试命令返回失败状态

同时可以移除原步骤中的env配置块,因为参数已经通过命令行传递,更直观。

方案二:通过SonarQube质量门控制构建流程

如果你的项目已经依赖SonarQube做质量管控,可以通过配置SonarQube质量门,再在GitHub Actions中检查质量门状态来终止构建。

步骤1:在SonarQube中配置质量门

  1. 登录SonarQube后台,进入质量门页面
  2. 创建新质量门或修改现有质量门,添加条件:
    • 条件类型:行覆盖率
    • 运算符:<
    • 值:70
    • 状态:ERROR
  3. 将该质量门关联到你的项目JK-Api

步骤2:在GitHub Actions中添加质量门检查步骤

在.NET sonarscanner end步骤之后,新增一个步骤来检查SonarQube质量门状态:

- name: Check SonarQube Quality Gate
  shell: pwsh
  run: |
    $sonarHost = "${{ secrets.MDN_SONARQUBE_HOST }}"
    $sonarToken = "${{ secrets.MDN_SONARQUBE_TOKEN }}"
    $projectKey = "JK-Api"
    $url = "$sonarHost/api/projects/quality_gate/status?projectKey=$projectKey"
    $maxRetries = 10
    $retryInterval = 5

    for ($i=1; $i -le $maxRetries; $i++) {
        try {
            $response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $sonarToken"}
            
            if ($response.projectStatus.status -eq "ERROR") {
                Write-Error "SonarQube Quality Gate failed: Coverage below 70% threshold"
                exit 1
            } elseif ($response.projectStatus.status -eq "OK") {
                Write-Host "SonarQube Quality Gate passed"
                exit 0
            } else {
                Write-Host "Quality Gate status is $($response.projectStatus.status), retrying in $retryInterval seconds... ($i/$maxRetries)"
                Start-Sleep -Seconds $retryInterval
            }
        } catch {
            Write-Host "Error checking Quality Gate: $_"
            Start-Sleep -Seconds $retryInterval
        }
    }

    Write-Error "Max retries reached, failed to verify Quality Gate status"
    exit 1

这个脚本会循环检查SonarQube质量门状态,等待分析完成。如果质量门状态为ERROR(覆盖率低于阈值),则终止构建。

方案对比

  • 方案一:速度快,无需等待SonarQube分析,适合快速反馈场景;但仅能检查覆盖率单一指标。
  • 方案二:可统一管理多种质量规则(如代码异味、漏洞等),与SonarQube的质量管控体系集成更紧密;但需要等待SonarQube完成分析,耗时稍长。

内容的提问来源于stack exchange,提问作者Niranjan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:02:04