我正在尝试从当前构建管道和分支下载给定标签的最新可用工件,但出现以下错误。
##[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
任何帮助将不胜感激
最佳答案
Downloading latest Pipeline Artifact from branch based on Tag
我可以自己重现这个问题。
我认为这是带有标签的多个阶段中的 DownloadPipelineArtifact
任务的问题。
经过多方调查,我发现如果我们在多阶段使用DownloadPipelineArtifact
任务:
- task: DownloadPipelineArtifact@2
displayName: 'Download Latest DLLs'
inputs:
source: 'specific'
project: $(System.TeamProjectId)
pipeline: $(System.DefinitionId)
runVersion: 'latestFromBranch'
runBranch: $(Build.SourceBranch)
它将尝试下载指定分支上的最新版本。由于我们使用多阶段,构建阶段在当前管道中成功,此任务 DownloadPipelineArtifact
将从之前的 build
阶段下载工件。不过此时还没有添加tag,需要在pipeline完成后添加:
在这种情况下,我们将收到错误信息No builds currently exist in the pipeline definition supplied.
。
因为构建阶段生成工件的当前管道没有用标签标记,所以它的标签是空的。
这个问题的关键是多阶段yaml在同一个管道中进行构建和测试。它不同于经典的流水线。管道完成后,我们不使用任务 DownloadPipelineArtifact
。
我在 azure devops 任务上提交了这个问题:https://github.com/microsoft/azure-pipelines-tasks/issues/13101 .您可以查看此票以获取反馈。
希望这对您有所帮助。
关于azure-devops - 根据标签从分支下载最新的管道工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62294343/