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

Azure Pipelines获取代码行数与覆盖率并推送至网站求助

Azure Pipelines:代码行数与覆盖率数据推送及兼容问题解决

一、修复.NET 7下Coverlet代码覆盖率兼容报错

你的配置存在两个核心问题导致.NET 5兼容报错:

  • 目标框架版本占位符netcoreappX.Y未替换为实际的.NET 7版本net7.0
  • 重复执行代码覆盖率收集(DotNetCLI test已集成收集逻辑,无需单独安装coverlet.console)

修改后的YAML配置:

- stage: 'Test'
  displayName: 'Test stage'
  jobs:
  - job: 'TestWithCodeCoverage'
    displayName: 'Test with Code Coverage'

    steps:
    - task: DotNetCoreCLI@2
      inputs:
        command: 'test'
        projects: '**/*.csproj'
        arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutput=$(Agent.TempDirectory)/coverage/ /p:CoverletOutputFormat=cobertura'
        publishTestResults: true
        testRunTitle: 'Code Coverage'
      displayName: 'Run Tests & Collect Coverage'

    - task: PublishCodeCoverageResults@1
      displayName: 'Publish Code Coverage Results'
      inputs:
        codeCoverageTool: 'Cobertura'
        summaryFileLocation: '$(Agent.TempDirectory)/coverage/**/*.cobertura.xml'
        reportDirectory: '$(Build.SourcesDirectory)/CodeCoverageReports'

说明:

  • 直接通过DotNetCLI的test命令集成coverlet,避免版本冲突
  • 指定CoverletOutput到Agent临时目录,确保后续能正确定位报告文件
  • 需确保测试项目的目标框架为net7.0,与配置匹配

二、代码行数与覆盖率数据推送方案

1. 代码行数数据捕获与推送

修改PowerShell步骤,将行数存入管道变量并直接推送至网站API:

- powershell: |
    $loc = Get-ChildItem -Recurse -File -Path $(System.DefaultWorkingDirectory) -Include *.cs,*.vb,*.js,*.ts,*.html,*.css,*.scss,*.json | Get-Content | Measure-Object -Line
    $totalLines = $loc.Lines
    # 将行数设置为管道变量,供后续步骤复用
    Write-Host "##vso[task.setvariable variable=TotalLinesOfCode;isOutput=true]$totalLines"
    # 推送至网站API
    $body = @{
        buildId = "$(Build.BuildId)"
        totalLines = $totalLines
    } | ConvertTo-Json
    Invoke-RestMethod -Uri "你的网站API地址" -Method Post -Body $body -ContentType "application/json"
  displayName: 'Count & Push Lines of Code'
  condition: succeeded()

2. 代码覆盖率数据捕获与推送

解决兼容问题后,解析cobertura.xml提取覆盖率数据并推送:

- powershell: |
    # 定位生成的cobertura报告文件
    $coverageFile = Get-ChildItem -Path $(Agent.TempDirectory)/coverage -Name "*.cobertura.xml" -Recurse | Select-Object -First 1
    $coveragePath = Join-Path $(Agent.TempDirectory)/coverage $coverageFile
    # 解析XML获取行覆盖率百分比
    $xml = [xml](Get-Content $coveragePath)
    $lineCoverage = $xml.coverage.'line-rate' * 100
    $formattedCoverage = [math]::Round($lineCoverage, 2)
    # 推送至网站API
    $body = @{
        buildId = "$(Build.BuildId)"
        lineCoverage = $formattedCoverage
    } | ConvertTo-Json
    Invoke-RestMethod -Uri "你的网站API地址" -Method Post -Body $body -ContentType "application/json"
  displayName: 'Extract & Push Code Coverage'
  condition: succeeded()
  dependsOn: 'Run Tests & Collect Coverage'

备选方案:利用Azure DevOps API统一拉取数据

如果需要从API批量获取数据,可在流水线完成后调用以下接口:

  • 代码行数:在流水线中将行数存入构建自定义属性,通过Builds - Get API获取
  • 代码覆盖率:通过Code Coverage - Get Coverage Data API获取已发布的报告数据
    调用时需使用Azure DevOps个人访问令牌(PAT)授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:25:24