You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps Pipeline无法发布测试与覆盖率结果求助

问题原因

你遇到的核心问题是Azure DevOps中不同Stage/Job的运行环境完全隔离,第一个Job生成的文件存放在该Job专属的$(Build.ArtifactStagingDirectory)中,后续Publish阶段的Job无法直接访问这个目录下的内容。

解决方案

需要通过「发布构建工件」+「下载构建工件」的步骤,在不同Job之间传递文件。具体修改如下:

1. 在第一个Job中添加发布工件任务

在CmdLine@2任务之后,添加PublishBuildArtifacts@1任务,把测试结果和覆盖率文件发布为构建工件:

- task: PublishBuildArtifacts@1
  displayName: Publish test and coverage artifacts
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'test-coverage-artifacts'
    publishLocation: 'Container'

2. 在Publish阶段的Job中添加下载工件任务

在PublishTestResults@2之前,添加DownloadBuildArtifacts@0任务,将发布的工件下载到当前Job的目录:

- task: DownloadBuildArtifacts@0
  displayName: Download test and coverage artifacts
  inputs:
    buildType: 'current'
    downloadType: 'single'
    artifactName: 'test-coverage-artifacts'
    downloadPath: '$(Build.ArtifactStagingDirectory)'
修改后的完整流水线片段示例
- task: CmdLine@2
  displayName: Running build and creating testContainer
  inputs:
   script: |
    docker build -f $(dockerfilePath) --target build -t $(imageRepository):$(tag) .
    docker create -ti --name testcontainer $(imageRepository):$(tag)
    docker cp testcontainer:/TestResults/ $(Build.ArtifactStagingDirectory)/testResults
    docker cp testcontainer:/TestResults/Coverage/ $(Build.ArtifactStagingDirectory)/coverage
    docker rm -fv testcontainer
    ls -la $(Build.ArtifactStagingDirectory)/testResults
    ls -la $(Build.ArtifactStagingDirectory)/coverage

# 新增:发布工件
- task: PublishBuildArtifacts@1
  displayName: Publish test and coverage artifacts
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'test-coverage-artifacts'
    publishLocation: 'Container'

- stage: Publish
  displayName: Publish test results
  jobs:
  - job: Publish
    displayName: Publish results
    pool:
      vmImage: $(vmImageName)
    steps:
    # 新增:下载工件
    - task: DownloadBuildArtifacts@0
      displayName: Download test and coverage artifacts
      inputs:
        buildType: 'current'
        downloadType: 'single'
        artifactName: 'test-coverage-artifacts'
        downloadPath: '$(Build.ArtifactStagingDirectory)'

    - task: PublishTestResults@2
      displayName: 'Publish test results'
      inputs:
        testResultsFormat: 'NUnit'
        testResultsFiles: '**/*.trx'
        searchFolder: '$(Build.ArtifactStagingDirectory)/testResults'
    - task: PublishCodeCoverageResults@2
      displayName: 'Publish code coverage results'
      inputs:
        summaryFileLocation: '$(Build.ArtifactStagingDirectory)/coverage/coverage.cobertura.xml'
        pathToSources: '$(Build.SourcesDirectory)'
额外验证点
  • 确认PublishBuildArtifacts的PathtoPublish确实包含testResults和coverage目录
  • 运行流水线时,查看「工件」tab,确认test-coverage-artifacts已成功上传
  • 下载工件后,可添加ls命令验证文件是否存在于当前Job的$(Build.ArtifactStagingDirectory)中

内容的提问来源于stack exchange,提问作者messerke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:23:17