首页 > 解决方案 > 使用从 UI 中的资源中选择的工件手动运行 YAML 构建管道将被忽略

问题描述

我们有一个 YAML 文件 ( pipelineB),它完成了它必须做的事情,它从特定的其他现有构建管道 ( pipelineA) 下载最新的构建工件。这是自动触发的。现在我们想要pipelineB手动运行这个构建,并能够选择另一个要使用的工件版本。在 Azure DevOps 构建管道中有一个“运行管道”选项,您可以在其中选择要使用的“资源”。如果您选择一个资源,您最终会得到一个包含所有构建的列表pipelineA,您可以从中进行选择。

运行管道

资源

管道A运行

如果我们然后从管道运行和运行中选择一个较旧的(例如1.2.43-10019-master)构建,我们查看日志,我们会看到它忽略了我们手动选择的内容并始终下载最新版本。我可以理解它这样做是因为该步骤告诉使用构建版本进行下载。pipelineApipelineBDownloadBuildArtifact@0latestFromBranch

我的问题:我们如何利用手动选择资源构建工件并在 YAML 管道中进一步使用所选版本?理想情况下,如果您不进行手动运行/选择,则默认情况下应该只使用最新版本的工件。

下面是我们 YAML 管道的一段摘录:

name: pipelineB

resources:
  pipelines:

  - pipeline: pipelineA
    source: pipelineA
    branch: master
    trigger:
      branches:
        - master

steps:

  - task: DownloadBuildArtifacts@0
    name: 
    displayName: 'Download pipelineA artifact'
    inputs:
      buildtype: specific
      project: ourProjectName
      pipeline: pipelineA
      branchName: refs/heads/master
      buildVersionToDownload: latestFromBranch
      downloadType: specific
      downloadPath: $(Pipeline.Workspace)

基于@Krzysztof Madej 回答的工作解决方案。仅对于 需要DownloadBuildArtifacts@0将字段buildVersionToDownload更改为的步骤,specific并且需要引入buildId引用pipelineA资源的新字段。

steps:

  - task: DownloadBuildArtifacts@0
    name: 
    displayName: 'Download pipelineA artifact'
    inputs:
      buildtype: specific
      project: ourProjectName
      pipeline: pipelineA
      branchName: refs/heads/master
      buildVersionToDownload: 'specific'
      downloadType: specific
      buildId: '$(resources.pipeline.pipelineA.runID)'
      downloadPath: $(Pipeline.Workspace)

标签: azure-devopsazure-pipelines

解决方案


请更改buildVersionToDownloadspecific然后使用buildId: '$(resources.pipeline.hadar.runID)'

  - task: DownloadBuildArtifacts@0
    inputs:
      buildType: 'specific'
      project: '4fa6b279-3db9-4cb0-aab8-e06c2ad550b2'
      pipeline: '72'
      branchName: 'refs/heads/master'
      buildVersionToDownload: 'specific'
      downloadType: 'single'
      downloadPath: '$(Pipeline.Workspace)'
      artifactName: 'drop'
      buildId: '$(resources.pipeline.hadar.runID)'

您可以在此处检查管道资源的可用变量

resources.pipeline.<Alias>.projectName
resources.pipeline.<Alias>.projectID
resources.pipeline.<Alias>.pipelineName
resources.pipeline.<Alias>.pipelineID
resources.pipeline.<Alias>.runName
resources.pipeline.<Alias>.runID
resources.pipeline.<Alias>.runURI
resources.pipeline.<Alias>.sourceBranch
resources.pipeline.<Alias>.sourceCommit
resources.pipeline.<Alias>.sourceProvider
resources.pipeline.<Alias>.requestedFor
resources.pipeline.<Alias>.requestedForID

我又检查了一遍,很简单

  - download: pipelineA

像上面的代码一样工作。


推荐阅读