В файлах trx на локальном агенте не обнаружено вложений покрытия кода

Я настроил конвейер Azure Devops для приложения .net core 3.1.0, но sonarcloud не выбирает файлы покрытия. Что я мог упустить, так это то, что в этой сборке используется автономный конвейер Azure Devops. Есть ли что-то еще, что нужно агенту, из которого запускается сборка?

 C:\agent\_work\_tasks\SonarCloudPrepare_14d9cde6-c1da-4d55-aa01-2965cd301255\2.2.0\classic-sonar-scanner-msbuild\SonarScanner.MSBuild.exe end
SonarScanner for MSBuild 6.2
Using the .NET Framework version of the Scanner for MSBuild
Post-processing started.
11:17:30.481  11:17:30.481  WARNING: File 'C:\agent\_work\1\s\Services\Internal\WebJob\WebJob_TemporaryKey.pfx' does not exist.
11:17:30.496  11:17:30.496  WARNING: File 'C:\agent\_work\1\s\Services\External\Api\Properties\PublishProfiles\vodacom-api-fs-sme-dev - Web Deploy.pubxml' does not exist.
11:17:30.496  11:17:30.496  WARNING: File 'C:\agent\_work\1\s\Tests\Functional\Helpers.Tests\libman.json' does not exist.
11:17:30.715  11:17:30.715  WARNING: File 'C:\agent\_work\1\s\Services\Internal\Credit.Internal.Api\Properties\PublishProfiles\api-credit-uat - FTP.pubxml' does not exist.
11:17:30.715  11:17:30.715  WARNING: File 'C:\agent\_work\1\s\Services\Internal\Credit.Internal.Api\Properties\PublishProfiles\api-credit-uat - ReadOnly - FTP.pubxml' does not exist.
Calling the TFS Processor executable...
Fetching code coverage report information from TFS...
Attempting to locate a test results (.trx) file...
Looking for TRX files in: C:\agent\_work\1\TestResults
The following test results files were found: C:\agent\_work\1\TestResults\agentdevopsvm1$_agentdevopsvm1_2024-07-22_11_15_24.trx
**No code coverage attachments were found from the trx files.**
Not using the fallback mechanism to detect binary coverage files.
Coverage report conversion completed successfully.

Ниже приведен файл yaml, который я настроил.

    trigger:
    - feature/EE-14
    
    pool:
      name: DevOpsAgent
      
    
    variables:
    - name: BuildConfiguration
      value: Dev
    - name: BuildPlatform
      value: any cpu
    
    jobs:
    - job: Job_1
      displayName: Code Quality Job
       
    
      steps:
      - checkout: self
        clean: true
        fetchTags: false
      - task: VisualStudioTestPlatformInstaller@1
        inputs:
          packageFeedSelector: 'nugetOrg'
          versionSelector: 'latestStable'
      - task: NuGetToolInstaller@1
        displayName: NuGet install
        inputs:
          versionSpec: 6.6.1
    
      - task: NuGetCommand@2
        displayName: NuGet Restore
        inputs:
          command: restore
          includeSymbols: false
          includeNuGetOrg: true
          restoreSolution: '**/*.sln'
          
      
      - task: UseDotNet@2
        inputs:
          packageType: 'runtime'
          version: '3.1.0'
          installationPath: C:\Program Files\dotnet\
    
      - task: SonarCloudPrepare@2
        displayName: Prepare Sonar Cloud Analysis
        inputs:
          SonarCloud: '********'
          organization: '*******'
          scannerMode: 'MSBuild'
          projectKey: '*******'
          projectName: '*****'
         
    
      - task: VSBuild@1
        displayName: Build Solution
        retryCountOnTaskFailure: 1
        inputs:
          vsVersion: latest
          platform: $(BuildPlatform)
          configuration: $(BuildConfiguration)
          clean: true
      
      - task: VSTest@2
        displayName: Run Tests
        inputs:
          testAssemblyVer2: |
           Tests\Functional\*.*[Tt]ests\**\$(BuildConfiguration)\*[Tt]ests*.dll
           Tests\Functional\*.*[Tt]ests\**\$(BuildConfiguration)\net6.0\*[Tt]ests*.dll
           Tests\Functional\*.*[Tt]ests\**\$(BuildConfiguration)\netcoreapp3.1\*[Tt]ests*.dll
           !**\*dMVC.Tests.Common*
           !**\*Microsoft.VisualStudio.TestPlatform*
           !**\obj\**
          platform: '$(BuildPlatform)'
          configuration: '$(BuildConfiguration)'
          runInParallel: true 
          pathtoCustomTestAdapters: $(System.DefaultWorkingDirectory)\packages
          resultsFolder: 'C:\agent\_work\1\TestResults'
          codeCoverageEnabled: true
          # customCoverletOptions: '--format cobertura'  # Example for .NET Core with Coverlet
          diagnosticsEnabled: true
          
      - task: SonarCloudAnalyze@2
        displayName: Run Code Analysis
        inputs:
          jdkversion: 'JAVA_HOME_17_X64'
    
      - task: SonarCloudPublish@2
        inputs:
          pollingTimeoutSec: '300'

Файл проекта:

    <Project Sdk = "Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    
        <IsPackable>false</IsPackable>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include = "Microsoft.NET.Test.Sdk" Version = "17.8.0" />
        <PackageReference Include = "NUnit" Version = "3.14.0" />
        <PackageReference Include = "NUnit3TestAdapter" Version = "4.5.0" />
        <PackageReference Include = "NUnit.Analyzers" Version = "3.9.0">
          <PrivateAssets>all</PrivateAssets>
          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
        <PackageReference Include = "coverlet.collector" Version = "3.1.2" />
        <PackageReference Include = "IdentityModel" Version = "6.0.0" />
        <PackageReference Include = "Refit.HttpClientFactory" Version = "6.3.2" />
        <PackageReference Include = "Newtonsoft.Json" Version = "13.0.1" />
      </ItemGroup>
    
      <ItemGroup>
        <ProjectReference Include = "..\..\..\Services\Shared\Credit.Internal.Api.Client\Credit.Internal.Api.Client.csproj" />
      </ItemGroup>
    
      <ItemGroup>
        <None Update = "Resources\blank.pdf">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
      </ItemGroup>
    
    </Project>

Сообщение об ошибке выглядит странно, как смесь SonarCloudPrepare@2 и SonarCloudAnalyze@2. Не могли бы вы уточнить, в какой задаче сообщалось об ошибке? Пожалуйста, также попробуйте агент, размещенный на Microsoft.

wade zhou - MSFT 22.07.2024 15:29

@wadezhou-MSFT Ошибка исходит от SonarCloudAnalyze@2.

Nicholas Namacha 23.07.2024 10:59

Похоже, что реальная проблема заключается в том, что при запуске vs test мы получаем сообщение об ошибке «Сбор данных: невозможно найти сборщик данных с понятным именем «Покрытие кода».

Nicholas Namacha 23.07.2024 13:15

Спасибо за обновление. Вы можете проверить тестовое задание vsts на предмет результата и отчета о покрытии. Убедитесь, что они сгенерированы правильно, и тогда задача анализа сможет их найти. Пожалуйста, проверьте детали ниже. Спасибо.

wade zhou - MSFT 23.07.2024 14:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно сообщению об ошибке, результат теста trx был найден, но не для отчета о покрытии. Вы можете подтвердить результат задачи VSTest@2 для обоих файлов и убедиться, что они сгенерированы правильно.

Моя задача Vsts для справки. Используйте $(Agent.BuildDirectory)\TestResults для папки результатов:

  - task: VSTest@2
    inputs:
      testSelector: 'testAssemblies'
      testAssemblyVer2: |
        **\$(BuildConfiguration)\*Test*.dll
        !**\*dMVC.Tests.Common*
        !**\*Microsoft.VisualStudio.TestPlatform*
        !**\obj\**
      searchFolder: '$(System.DefaultWorkingDirectory)'
      resultsFolder: '$(Agent.BuildDirectory)\TestResults'
      runInParallel: true
      codeCoverageEnabled: true
      platform: '$(BuildPlatform)'
      configuration: '$(BuildConfiguration)'
      diagnosticsEnabled: true

И SonarCloudAnalyze@2 может успешно найти отчет о trx и покрытии.

Редактировать:

Я могу воспроизвести ту же проблему (сбор данных: невозможно найти сборщик данных с понятным именем «Покрытие кода»).) с автономным агентом. Это исправляется путем перехода на visual studio enterprise издание, так как освещение доступно только в этом выпуске.

Я думаю, что что-то не хватает в локальном агенте, потому что, если я использую агент, размещенный Microsoft, генерируются оба файла, но в локальном агенте создается только trx, а не файл покрытия. Что это могло быть?

Nicholas Namacha 24.07.2024 12:44

Какая версия Visual Studio установлена ​​на вашем локальном агенте? покрытие доступно только в Visual Studio Enterprise, пожалуйста, проверьте ссылку , чтобы узнать о различиях в инструментах тестирования между версиями.

wade zhou - MSFT 24.07.2024 15:56

Я могу воспроизвести ту же проблему с автономным агентом: после того, как я перейду на установку версии Visual studio enterprise, покрытие может быть создано, это исправлено для меня. Я отредактирую ответ с подробностями.

wade zhou - MSFT 24.07.2024 16:53

Спасибо, проблема была в версии Visual Studio.

Nicholas Namacha 25.07.2024 15:37

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

Как гарантировать, что Azure Pipelines принимает мои файлы trx для публикации результатов тестов?
Создать секрет Azure Keyvault, не раскрывая значения
Возникает ошибка при попытке отключить конвейер Azure DevOps с помощью Powershell
Автоматическое преобразование значения Azure DevOps в целочисленный тип в yaml
Есть ли способ создать повторно используемые и масштабируемые конвейеры сборки и развертывания для аналогичных служб в среде Azure DevOps?
Проблема при создании рабочего элемента Azure DevOps с полями Microsoft.VSTS.Common.Priority и Microsoft.VSTS.Common.StackRank
Некоторые конвейеры сборки ADO отображают все рабочие элементы в связанных элементах, а другие — только соответствующие элементы. Ищем идеи
Родительская ссылка Azure DevOps REST API на существующую ошибку рабочего элемента
Как предоставить разрешения на вызов REST API Azure DevOps с помощью System.AccessToken?
Как включить или отключить вкладки на основе шаблона значений поля в Azure DevOps WITD XML