当我使用 azure pipeline 对我的 dot net 代码进行拉取请求声纳扫描时,零新行

问题描述 投票:0回答:1
- script: |   
    git config --global http.https://dev.azure.com/<company>/.extraheader "AUTHORIZATION: bearer $(System.AccessToken)"
    
    # Now fetch the PR source branch using the token
    git fetch origin $(System.PullRequest.SourceBranch):$(System.PullRequest.SourceBranch)
    git checkout $(System.PullRequest.SourceBranch)
  displayName: 'Fetch and Checkout PR Source Branch'
  env:
    # This exposes the system access token to the script
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- script: |
    git checkout $(System.PullRequest.SourceBranch)
  displayName: 'Checkout PR Source Branch'

- task: DotNetCoreCLI@2
  displayName: New Manifest for tool
  inputs:
    command: custom
    custom: 'new '
    arguments: tool-manifest



- task: PowerShell@2
  displayName: Set the prereleaseVersionNumber variable value
  inputs:
    targetType: 'inline'
    script: |
      [string] $dateTime = (Get-Date -Format 'yyyyMMddTHHmmss')
      [string] $prereleaseVersionNumber = "$(stableVersionNumber)-$(Build.SourceVersion)"
      Write-Host "Setting the prerelease version number variable to '$prereleaseVersionNumber'."
      Write-Host "##vso[task.setvariable variable=prereleaseVersionNumber]$prereleaseVersionNumber"

- task: PowerShell@2
  displayName: Set the versionNumber to the stable or prerelease version number based on if the 'main' branch is being built or not
  inputs:
    targetType: 'inline'
    script: |
      [bool] $isMainBranch = $$(isMainBranch)
      [string] $versionNumber = "$(prereleaseVersionNumber)"
      if ($isMainBranch)
      {
        $versionNumber = "$(stableVersionNumber)"
      }
      Write-Host "Setting the version number to use to '$versionNumber'."
      Write-Host "##vso[task.setvariable variable=versionNumber]$versionNumber"

- task: PowerShell@2
  displayName: Set the name of the build (i.e. the Build.BuildNumber)
  inputs:
    targetType: 'inline'
    script: |
      [string] $buildName = "$(versionNumber)_$(Build.SourceBranchName)"
      Write-Host "Setting the name of the build to '$buildName'."
      Write-Host "##vso[build.updatebuildnumber]$buildName"
- task: NuGetToolInstaller@1
  displayName: 'Install NuGet 5.8'
  inputs:
    versionSpec: '5.8.x'
    
- task: NuGetCommand@2
  displayName: 'Restore packages using NuGet'
  inputs:
    restoreSolution: '**/*.csproj'
     
- task: UseDotNet@2
  displayName: Use .NET 6.0
  inputs:
    packageType: 'sdk'
    version: '6.0.x'


- task: DotNetCoreCLI@2
  displayName: 'Add Coverlet.msbuild package'
  inputs:
    command: 'custom'
    custom: 'add'
    projects: '$(Build.SourcesDirectory)/Virtue/Virtue.API/Virtue.API.csproj'
    arguments: 'package coverlet.msbuild'
  

- task: DotNetCoreCLI@2
  displayName: 'dotnet restore Virtue.API'
  inputs:
    command: 'restore'
    projects: '$(Build.SourcesDirectory)/Virtue/Virtue.API/Virtue.API.csproj'
    includeNuGetOrg: true
    noCache: true

- task: SonarCloudPrepare@1
  inputs:
    SonarCloud: 'SonarCloud Service Connection'
    organization: '<company_name>'
    scannerMode: 'MSBuild'
    projectKey: 'dotnet'
    projectName: 'Dotnet'
    extraProperties: |
      sonar.projectBaseDir=$(Build.SourcesDirectory)
      sonar.exclusions=**/README.md,**/obj/**,**/*.dll
      sonar.inclusions=**/*.csproj
      sonar.cs.vscoveragexml.reportsPaths=$(Build.SourcesDirectory)/**/coverage.xml
      sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/**/coverage.opencover.xml
      sonar.cs.vstest.reportsPaths=$(Agent.TempDirectory)/*.trx
      sonar.pullrequest.key=$(System.PullRequest.PullRequestId)
      sonar.pullrequest.branch=$(System.PullRequest.SourceBranch)
      sonar.pullrequest.base=$(System.PullRequest.TargetBranch)


- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'


- task: DotNetCoreCLI@2
  displayName: 'Test ...'
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration $(BuildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=opencover --logger trx'
    testRunTitle: 'dotnet test'

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Build.SourcesDirectory)/**/coverage.opencover.xml'
    reportDirectory: '$(Build.SourcesDirectory)/**/coverage/'

- script: |
    dotnet tool install -g dotnet-reportgenerator-globaltool
    reportgenerator -reports:$(Build.SourcesDirectory)/**/coverage.opencover.xml -targetdir:$(Build.SourcesDirectory)/CoverageReport -reporttypes:"HtmlInline;Cobertura"
  displayName: 'Generate Coverage Report'
  
- task: PublishTestResults@2
  displayName: "Publish Test Results"
  inputs:
    testResultsFormat: VSTest
    testResultsFiles: "$(Build.SourcesDirectory)/**.*trx"
    mergeTestResults: true
    condition: succeededOrFailed()

- task: SonarCloudAnalyze@1
  inputs:
    sonar.analysis.level: 'DOTNET'

- task: SonarCloudPublish@1
  inputs:
    pollingTimeoutSec: '300'

为什么在拉取请求时,它没有从我的功能分支中获取新行。我可以看到零覆盖率并且没有新线路。请帮我。它处于高优先级。

我尝试了很多方法,但没有成功。我想使用触发我的天蓝色管道的拉取请求来分析新的代码行

azure azure-devops continuous-integration azure-pipelines sonarcloud
1个回答
0
投票

收集代码覆盖率需要了解一些要点:

  1. 默认情况下,测试和代码覆盖率的输出结果文件生成在“

    $(Agent.TempDirectory)
    ”目录下,而不是“
    $(Build.SourcesDirectory)
    ”目录下。 如果您想指定不同的输出目录,在
    dotnet test
    命令上,您可以配置如下参数。

    dotnet test --results-directory "$(Build.SourcesDirectory)/TestResults" -p:CollectCoverage=true -p:CoverletOutput="$(Build.SourcesDirectory)/TestResults/coverage/" . . .
    
  2. 如果您的项目是.NET 5或更高版本,建议在测试项目中使用NuGet包“

    coverlet.collector
    ”而不是“
    coverlet.msbuild
    ”。

  3. 在管道中,您可以如下进行配置。 dotnet test任务默认会自动发布测试结果(

    publishTestResults: true
    ),如果您想使用单独的
    PublishTestResults
    任务来发布测试结果,可以设置“
    publishTestResults: false
    ”。然后在 dotnet test
     任务后面添加一个 
    PublishTestResults 任务。

    steps:
    . . .
    
    - task: DotNetCoreCLI@2
      displayName: 'dotnet test'
      inputs:
        command: test
        projects: path/to/test/project.csproj
        arguments: '--no-build -c $(buildConfiguration) -p:CollectCoverage=true --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'
    
    - task: PublishCodeCoverageResults@2
      displayName: 'Publish code coverage results'
      inputs:
        summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
        pathToSources: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
    
© www.soinside.com 2019 - 2024. All rights reserved.