Запуск программы Coverlet и генератора отчетов в конвейере DevOps для macOS

У меня есть проект C#, написанный на dotnet core 2.1, для которого я пытаюсь настроить конвейер Azure, чтобы я мог получить покрытие кода при работе с агентом macOS (я могу перейти на другие агенты, но в идеале конвейер будет системным агностик). До сих пор я пытался получить покрывало и reportgenerator работать вместе, но я продолжаю нарваться проблемами, такие какCould not find data collector 'XPlat Code Coverage'.

Я бы хотел, чтобы было определено покрытие кода (какое покрытие, кажется, делает), и отчет о покрытии кода сгенерирован и каким-то образом отображен в конвейерах Azure.

Вот мой конвейер:

pool:
  vmImage: macOS-latest

variables:
  solution: 'src/MySolution.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Debug'

steps:
- task: DotNetCoreInstaller@1
  displayName: 'Use .NET Core sdk 2.2.103'
  inputs:
    version: 2.2.103

- task: DotNetCoreCLI@2
  displayName: 'Restore NuGet packages for $(solution)'
  inputs:
    command: 'restore'
    projects: '$(solution)'

- task: DotNetCoreCLI@2
  displayName: 'Build $(solution)'
  inputs:
    command: 'build'
    projects: '$(solution)'
    arguments: '-c $(buildConfiguration)'

- task: DotNetCoreCLI@2
  continueOnError: true
  inputs:
    command: custom
    custom: tool
    arguments: install -g coverlet.console
  displayName: Install Coverlet tool. This task will continue on error.

- task: DotNetCoreCLI@2
  displayName: 'Run tests for $(solution) collecting code coverage result'
  inputs:
    command: test
    projects: 'src/MySolution.SomeProject.Tests/*.csproj'
    arguments: -c $(buildConfiguration) --collect:"XPlat Code Coverage"

- script: coverlet src/MySolution.SomeProject.Tests/bin/$(buildConfiguration)/netcoreapp2.1/MySolution.SomeProject.Tests.dll --target "dotnet" --targetargs "test src/MySolution.SomeProject.Tests --no-build"
  displayName: Run Coverlet to get code coverage.

- task: DotNetCoreCLI@2
  continueOnError: true
  inputs:
    command: custom
    custom: tool
    arguments: install -g dotnet-reportgenerator-globaltool
  displayName: Install ReportGenerator tool

# This outputs Analyzing 0 classes, and an index.htm file is created, but not sure how to access it
- script: reportgenerator -reports:$(Build.SourcesDirectory)/coverage.json -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:HtmlInline_AzurePipelines
  displayName: 'Create reports.'

# Not sure what this should be
- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: $(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml

2 ответа

Решение

Так что у меня все заработало. Я как-то упустил возможность указать формат, которыйcoverletиспользует. По умолчанию выводитcoverage.json, но задав формат как cobertura он выводит coverage.cobertura.xml. Итак, этот скрипт yaml работает:

pool:
  vmImage: macOS-latest

variables:
  solution: 'src/MySolution.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Debug'

steps:
- task: DotNetCoreInstaller@1
  displayName: 'Use .NET Core sdk 2.2.103'
  inputs:
    version: 2.2.103

- task: DotNetCoreCLI@2
  displayName: 'Restore NuGet packages for $(solution)'
  inputs:
    command: 'restore'
    projects: '$(solution)'

- task: DotNetCoreCLI@2
  displayName: 'Build $(solution)'
  inputs:
    command: 'build'
    projects: '$(solution)'
    arguments: '-c $(buildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: 'Run tests for $(solution) collecting code coverage result'
  inputs:
    command: test
    projects: 'src/MySolution.SomeProject.Tests/*.csproj'
    arguments: -c $(buildConfiguration)

- task: DotNetCoreCLI@2
  continueOnError: true
  inputs:
    command: custom
    custom: tool
    arguments: install -g coverlet.console
  displayName: Install Coverlet tool. This task will continue on error.

- script: coverlet src/MySolution.SomeProject.Tests/bin/$(buildConfiguration)/netcoreapp2.1/MySolution.SomeProject.Tests.dll --target "dotnet" --targetargs "test src/MySolution.SomeProject.Tests --no-build" --format cobertura
  displayName: Run Coverlet to get code coverage.

- task: DotNetCoreCLI@2
  continueOnError: true
  inputs:
    command: custom
    custom: tool
    arguments: install -g dotnet-reportgenerator-globaltool
  displayName: Install ReportGenerator tool

- script: reportgenerator -reports:$(Build.SourcesDirectory)/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:HtmlInline_AzurePipelines
  displayName: 'Create reports.'

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: $(Build.SourcesDirectory)/coverage.cobertura.xml

Вам следует добавить следующий NuGet PackageReference в файл проекта.csproj.

<PackageReference Include="coverlet.collector" Version="1.1.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

И вы можете перейти по этой ссылке, чтобы настроить свой конвейер

Другие вопросы по тегам