我有 Azure DevOps yaml 部署管道,在构建管道完成并发布工件时触发。根据{{3}},工件将被下载到
<块引用>到 $(PIPELINE.WORKSPACE)/pipeline-identifier/artifact-identifier 文件夹。
我的触发器类似于
resources:
pipelines:
- pipeline: SmartHotel-PipelineIdentifier
project: DevOpsProject
source: SmartHotel-CI
trigger:
branches:
include:
- main
如何从模板访问管道标识符?我需要能够创建
<块引用>$(PIPELINE.WORKSPACE)/SmartHotel-PipelineIdentifier/artifact-identifier
基于上面的管道定义。
当管道由构建触发时,我可以使用
<块引用>$(Pipeline.Workspace)/$(resources.triggeringAlias)/artifact-identifier
给我我需要的东西,但是当管道被手动触发时该值是空白的。
对于要在管道部署作业的模板中使用的特定管道,我如何访问似乎称为管道标识符的值?
答案 0 :(得分:0)
您可以获得各种 properties of the pipeline resource,但前提是您知道别名。但是,如果它不是自动触发的,则无法获得该别名。如果你有更多的管道资源,你怎么知道要获得哪一个?
在这种情况下,您可以:
将管道标识符 (SmartHotel-PipelineIdentifier
) 作为参数传递给模板。
假设一个众所周知的管道标识符的约定(即始终使用 artifact-pipeline
而不是 SmartHotel-PipelineIdentifier
)
在调用模板之前将工件下载(或移动)到一个众所周知的位置。这是假设您无论如何都已经将管道标识符用于 download
任务,因此您可以在下载后立即执行 mv $(Pipeline.Workspace)/SmartHotel-PipelineIdentifier/artifact-identifier $(Pipeline.Workspace)/artifact-identifier
。
您还可以使用完整的 DownloadPipelineArtifact 任务(download
是其简写)并将其配置为下载到不同的目录。
在运行时确定目录名称,一旦工件被下载并动态设置管道变量:
# there will be directories in $(Pipeline.Workspace) like "a", "b", "s" for checked out repositories - ignore them
- pwsh: |
ls $(Pipeline.Workspace)
$alias = Get-ChildItem $(Pipeline.Workspace) | ? { $_.Name.Length -gt 1 } | select -ExpandProperty Name -First 1
echo "##vso[task.setvariable variable=ArtifactAlias]$alias"
displayName: determine artifact pipeline alias
- pwsh: echo 'alias: $(ArtifactAlias)' # use $(ArtifactAlias) where you would use $(resources.triggeringAlias)