如何在模板内访问 azure devops 资源触发管道中的管道标识符

时间:2021-06-21 19:19:40

标签: azure-devops azure-devops-pipelines

我有 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

给我我需要的东西,但是当管道被手动触发时该值是空白的。

对于要在管道部署作业的模板中使用的特定管道,我如何访问似乎称为管道标识符的值?

1 个答案:

答案 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)
    
相关问题