2

我正在尝试从当前构建管道和分支下载给定标签的最新可用工件,但我收到以下错误。

##[error]No builds currently exist in the pipeline definition supplied.

这是一个包含构建、部署和运行测试阶段的自动化测试的 3 阶段管道。在运行测试阶段,我尝试在构建阶段下载最近可用的工件,这可能是这次运行,也可能是更早的运行。

如果我将标签选项排除在外,它会尝试从上次可用的运行中获取它,但当时可能尚未创建此工件,因此我使用标签来尝试过滤它。

    - task: DownloadPipelineArtifact@2
      displayName: 'Download Latest DLLs'
      inputs:
        source: 'specific'
        project: $(System.TeamProjectId)
        pipeline: $(System.DefinitionId)            
        runVersion: 'latestFromBranch'
        runBranch: $(Build.SourceBranch)
        tags: 'myBuildTag'
        allowPartiallySucceededBuilds: true
        artifact: myArtifactName            
        patterns: '**/IntegrationTests/**/*'                      
        path: '$(Agent.TempDirectory)\myArtifactName'
      continueOnError: true

任何帮助,将不胜感激

4

1 回答 1

4

基于标签从分支下载最新的管道工件

我可以在我这边重现这个问题。

我认为这是DownloadPipelineArtifact带有标签的多个阶段的任务的问题。

经过一番调查,我发现如果我们DownloadPipelineArtifact在多阶段使用任务:</p>

- task: DownloadPipelineArtifact@2
  displayName: 'Download Latest DLLs'
  inputs:
    source: 'specific'
    project: $(System.TeamProjectId)
    pipeline: $(System.DefinitionId)            
    runVersion: 'latestFromBranch'
    runBranch: $(Build.SourceBranch)

它将尝试在指定分支上下载最新版本。由于我们使用多阶段,构建阶段在当前管道中成功,此任务DownloadPipelineArtifact将从前一阶段下载工件build。不过此时还没有添加标签,需要等流水线完成后再添加:

在此处输入图像描述

在这种情况下,我们将收到该错误No builds currently exist in the pipeline definition supplied.

由于构建阶段生成工件的当前管道尚未使用标签进行标记,因此其标签为空。

这个问题的关键是多阶段 yaml 使构建和测试在同一个管道中。它不同于经典的管道。DownloadPipelineArtifact管道完成后,我们不使用该任务。

我在 azure devops 任务上提交了这个问题:https ://github.com/microsoft/azure-pipelines-tasks/issues/13101 。您可以查看此票以获取反馈。

希望这可以帮助。

于 2020-06-11T03:51:20.283 回答