azure-devops - 使用从 UI 中的资源中选择的工件手动运行 YAML 构建管道将被忽略
问题描述
我们有一个 YAML 文件 ( pipelineB
),它完成了它必须做的事情,它从特定的其他现有构建管道 ( pipelineA
) 下载最新的构建工件。这是自动触发的。现在我们想要pipelineB
手动运行这个构建,并能够选择另一个要使用的工件版本。在 Azure DevOps 构建管道中有一个“运行管道”选项,您可以在其中选择要使用的“资源”。如果您选择一个资源,您最终会得到一个包含所有构建的列表pipelineA
,您可以从中进行选择。
如果我们然后从管道运行和运行中选择一个较旧的(例如1.2.43-10019-master
)构建,我们查看日志,我们会看到它忽略了我们手动选择的内容并始终下载最新版本。我可以理解它这样做是因为该步骤告诉使用构建版本进行下载。pipelineA
pipelineB
DownloadBuildArtifact@0
latestFromBranch
我的问题:我们如何利用手动选择资源构建工件并在 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)
解决方案
请更改buildVersionToDownload
为specific
然后使用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
像上面的代码一样工作。
推荐阅读
- selenium-chromedriver - puppeteer 在点击事件后识别元素内容
- amazon-ec2 - 重新启动后丢失 aws ec2 磁盘数据
- python - Python Linux:抓取文本文件中所有可以向前和向后拼写的行
- android - 我正在尝试发布到 localhost API,但我得到了 --> java.net.ConnectException: Connection timed out
- mysql - 从 3 张桌子查看
- mysql - 我需要删除低于一定数量的所有值
- r - 如何使用 dplyr::summarise “带来另一个变量”
- javascript - botConnection.activity$ node.js BOT
- r - 运行 lmer 时 R 挂起
- regex - 从 Twitter 数据集中删除或替换 URL 和 RT