Azure DevOps Server 2020本地部署PR差异覆盖率指标不显示求助
使用Azure DevOps Server 2020 Update 1.2本地部署版本,配置构建流水线后,拉取请求(Pull Request)文件标签页无法显示差异覆盖率指标。对比Azure DevOps云服务上的同配置.NET Core项目,云服务中指标正常显示,唯一区别是本地使用的Linux构建代理基于RedHat而非Ubuntu。询问服务器或代理是否需要安装特定软件或满足其他要求才能让覆盖率指标正常工作,附带YAML流水线相关步骤:
- task: DotNetCoreCLI@2 displayName: 'dotnet restore task' inputs: command: 'restore' feedsToUse: 'config' nugetConfigPath: '$(Build.SourcesDirectory)/NuGet.config' - task: DotNetCoreCLI@2 displayName: 'dotnet build $(buildConfiguration)' inputs: command: 'build' arguments: '--configuration $(buildConfiguration)' - task: DotNetCoreCLI@2 displayName: 'dotnet test $(buildConfiguration) v2' inputs: command: 'test' projects: '**/*Test/*.csproj' arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" --collect:"Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=json,cobertura,lcov,teamcity,opencover,coverlet -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.SplitCoverage="True"' publishTestResults: true
针对RedHat系统上的Azure DevOps代理,要让PR差异覆盖率正常显示,需满足以下关键要求:
安装系统依赖库
RedHat默认未预装.NET代码覆盖率工具所需的部分依赖,执行以下命令安装:sudo yum install -y libicu-devel krb5-devel zlib-devel这些是coverlet(跨平台.NET覆盖率工具)在RedHat环境下运行的必要组件,Ubuntu通常已默认包含,因此云服务环境无需额外配置。
修正测试任务参数
你的YAML中同时指定--collect:"XPlat Code Coverage"和--collect:"Code Coverage"会导致数据收集冲突,需保留前者(跨平台场景适用)并简化输出格式:- task: DotNetCoreCLI@2 displayName: 'dotnet test $(buildConfiguration) v2' inputs: command: 'test' projects: '**/*Test/*.csproj' arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura,opencover -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.SplitCoverage="True"' publishTestResults: true仅保留Azure DevOps解析PR覆盖率所需的
cobertura和opencover格式,多余格式会增加处理开销,甚至导致数据解析失败。确认代理权限
确保RedHat代理的运行账号拥有读取测试生成的覆盖率文件、向Azure DevOps Server发布覆盖率数据的权限,避免因权限不足导致数据无法上传。验证服务器更新状态
确认Azure DevOps Server 2020 Update 1.2已安装所有可用补丁,部分PR覆盖率功能可能需要特定更新才能在本地部署版本中正常生效。
内容的提问来源于stack exchange,提问作者user20668435

