当我包含代码覆盖率时,无法获得Azure DevOps发布管道

时间:2019-05-14 02:37:01

标签: azure-devops

因此,我正在尝试为新的统一构建和发布管道设置YAML,但是在将代码覆盖结果发布到构建时遇到了问题...

当我包含代码覆盖率报告时,我得到的错误是:

Job Job1: Step Download_Code Coverage Report_870 has an invalid name. Valid names may only contain alphanumeric characters and '_' and may not start with a number.

当我这样设置时,它可以工作,但是我没有得到代码覆盖率结果:

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core
trigger:
  - master

variables:
  buildConfiguration: 'Release'
  system.debug: true

stages:
  - stage: BuildAndDeploy
    displayName: Test
    jobs:
      - job: Quality
        displayName: Get Test Coverage and Code Quality
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          # Install the latest version of the dotnet sdk
          - task: DotNetCoreInstaller@0
            displayName: 'Use .NET Core sdk 2.2.103'
            inputs:
              version: 2.2.103

          - script: dotnet build --configuration $(buildConfiguration)
            displayName: 'dotnet build $(buildConfiguration)'

          - script: dotnet test --configuration $(buildConfiguration) --logger trx --no-build
            displayName: 'dotnet test --configuration $(buildConfiguration) --logger trx --no-build'

          - task: PublishTestResults@2
            inputs:
              testRunner: VSTest
              testResultsFiles: 'test/**/*.trx'

          - task: DotNetCoreCLI@2
            displayName: Package Artifact
            inputs:
              command: 'publish'
              arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
              zipAfterPublish: True
              publishWebProjects: true
              feedsToUse: 'select'
              versioningScheme: 'off'

          - task: PublishPipelineArtifact@0
            inputs:
              artifactName: 'FakeApiServer'
              targetPath: '$(Build.ArtifactStagingDirectory)/FakeApi.Server.AspNetCore.zip'

  - stage: DeployTest
    dependsOn: BuildAndDeploy
    condition: and(succeeded(), not(eq(variables['Build.SourceBranch'], 'refs/heads/master')))
    displayName: Deploy To Test
    jobs:
    - deployment: DeployToTest
      environment: Testing
      pool:
        vmImage: 'ubuntu-latest'
      strategy:
        runOnce:
          deploy:
            steps:
            - task: DownloadPipelineArtifact@1
              inputs:
                buildType: 'current'
                artifactName: 'FakeApiServer'
                targetPath: '$(System.ArtifactsDirectory)'

            - task: AzureRmWebAppDeployment@4
              displayName: Deploy to https://fake-api-test.azurewebsites.com
              inputs:
                ConnectionType: 'AzureRM'
                azureSubscription: 'Fake API Personal Azure Subscription'
                appType: 'webApp'
                WebAppName: 'fake-api-test'
                Package: $(System.ArtifactsDirectory)/*.zip
                enableCustomDeployment: true
                DeploymentType: 'zipDeploy'

  - stage: DeployProd
    dependsOn: BuildAndDeploy
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
    displayName: Deploy To Prod
    jobs:
    - deployment: DeployToProd
      environment: Production
      pool:
        vmImage: 'ubuntu-latest'
      strategy:
        runOnce:
          deploy:
            steps:
            - task: DownloadPipelineArtifact@1
              inputs:
                buildType: 'current'
                artifactName: 'FakeApiServer'
                targetPath: '$(System.ArtifactsDirectory)'

            - task: AzureRmWebAppDeployment@4
              displayName: Deploy to https://fake-api.azurewebsites.com
              inputs:
                ConnectionType: 'AzureRM'
                azureSubscription: 'Fake API Personal Azure Subscription'
                appType: 'webApp'
                WebAppName: 'fake-api'
                Package: $(System.ArtifactsDirectory)/*.zip
                enableCustomDeployment: true
                DeploymentType: 'zipDeploy'

但是当我包括运行和报告代码覆盖时,部署阶段将失败:

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core
trigger:
  - master

variables:
  buildConfiguration: 'Release'
  system.debug: true

stages:
  - stage: BuildAndDeploy
    displayName: Test
    jobs:
      - job: Quality
        displayName: Get Test Coverage and Code Quality
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          # Install the latest version of the dotnet sdk
          - task: DotNetCoreInstaller@0
            displayName: 'Use .NET Core sdk 2.2.103'
            inputs:
              version: 2.2.103

          - script: dotnet tool install --global coverlet.console
            displayName: 'Install coverlet'

          - script: dotnet tool install -g dotnet-reportgenerator-globaltool
            displayName: 'install reportgenerator'

          - script: dotnet build --configuration $(buildConfiguration)
            displayName: 'dotnet build $(buildConfiguration)'

          - script: dotnet test --configuration $(buildConfiguration) /p:Exclude="[xunit*]*" /p:CollectCoverage=true /p:CoverletOutputFormat=\"opencover,cobertura\" --logger trx --no-build
            displayName: 'dotnet test --configuration $(buildConfiguration) /p:Exclude="[xunit*]*" /p:CollectCoverage=true /p:CoverletOutputFormat="opencover,cobertura" --logger trx --no-build'

          - script: reportgenerator -reports:test/**/coverage.cobertura.xml -targetdir:coveragereport -reporttypes:"HtmlInline_AzurePipelines;Cobertura"
            displayName: 'reportgenerator -reports:test/**/coverage.cobertura.xml -targetdir:coveragereport -reporttypes:"HtmlInline_AzurePipelines;Cobertura"'

          - task: PublishTestResults@2
            inputs:
              testRunner: VSTest
              testResultsFiles: 'test/**/*.trx'

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

          - task: DotNetCoreCLI@2
            displayName: Package Artifact
            inputs:
              command: 'publish'
              arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
              zipAfterPublish: True
              publishWebProjects: true
              feedsToUse: 'select'
              versioningScheme: 'off'

          - task: PublishPipelineArtifact@0
            inputs:
              artifactName: 'FakeApiServer'
              targetPath: '$(Build.ArtifactStagingDirectory)/FakeApi.Server.AspNetCore.zip'

  - stage: DeployTest
    dependsOn: BuildAndDeploy
    condition: and(succeeded(), not(eq(variables['Build.SourceBranch'], 'refs/heads/master')))
    displayName: Deploy To Test
    jobs:
    - deployment: DeployToTest
      environment: Testing
      pool:
        vmImage: 'ubuntu-latest'
      strategy:
        runOnce:
          deploy:
            steps:
            - task: DownloadPipelineArtifact@1
              inputs:
                buildType: 'current'
                artifactName: 'FakeApiServer'
                targetPath: '$(System.ArtifactsDirectory)'

            - task: AzureRmWebAppDeployment@4
              displayName: Deploy to https://fake-api-test.azurewebsites.com
              inputs:
                ConnectionType: 'AzureRM'
                azureSubscription: 'Fake API Personal Azure Subscription'
                appType: 'webApp'
                WebAppName: 'fake-api-test'
                Package: $(System.ArtifactsDirectory)/*.zip
                enableCustomDeployment: true
                DeploymentType: 'zipDeploy'

  - stage: DeployProd
    dependsOn: BuildAndDeploy
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
    displayName: Deploy To Prod
    jobs:
    - deployment: DeployToProd
      environment: Production
      pool:
        vmImage: 'ubuntu-latest'
      strategy:
        runOnce:
          deploy:
            steps:
            - task: DownloadPipelineArtifact@1
              inputs:
                buildType: 'current'
                artifactName: 'FakeApiServer'
                targetPath: '$(System.ArtifactsDirectory)'

            - task: AzureRmWebAppDeployment@4
              displayName: Deploy to https://fake-api.azurewebsites.com
              inputs:
                ConnectionType: 'AzureRM'
                azureSubscription: 'Fake API Personal Azure Subscription'
                appType: 'webApp'
                WebAppName: 'fake-api'
                Package: $(System.ArtifactsDirectory)/*.zip
                enableCustomDeployment: true
                DeploymentType: 'zipDeploy'

再次,我得到的错误是:

Job Job1: Step Download_Code Coverage Report_870 has an invalid name. Valid names may only contain alphanumeric characters and '_' and may not start with a number.

我当时在Build 2019上与他们的展位上的Azure DevOps人员进行了交谈,他们似乎认为这可能是系统中的错误,但是我仍然没有回音,所以我想我会看到如果这里有人有什么想法。

真正奇怪的部分是,我从不告诉它下载代码覆盖率报告工件...它只是决定自己下载所有组件,并且在无法下载之前就失败了。下载我定义的管道工件步骤。

2 个答案:

答案 0 :(得分:0)

我有同样的问题,但是当我以相同的步骤使用标准工作时,我认为它与部署工作有关-没有出现问题。我还注意到,即使配置了池:vmImage:ubuntu-latest,我的部署作业仍在服务器代理上运行

答案 1 :(得分:0)

您可以尝试使用ReportGenerator扩展:https://marketplace.visualstudio.com/items?itemName=Palmmedia.reportgenerator(至少可以节省一些构建时间,因为您无需在构建过程中安装它)

今天我也遇到了一些构建问题,并且似乎与设置为'ubuntu-latest'的vmImage的使用有关。

我看到的是,在某些构建中,文件系统看起来像这样:

/home/vsts/agents/2.150.3/d:\a/1/s/

应为:

/home/vsts/work/1/s/

切换到“ Ubuntu 16.04”后,它似乎恢复了正常。

相关问题