如何获取Azure Pipelines运行中的资源信息

37次阅读
没有评论

问题描述

在使用Azure Pipelines时,想要获取关于运行中资源的信息。他们在平台团队中工作,负责构建和支持Azure Pipelines的YAML模板和各种自定义脚本。他们的组织中的人们使用这些YAML模板,例如:

resources:
  repositories:
    - repository: templates
      type: git
      name: PROJECT/cicd_stuff
      ref: refs/heads/releases/v0.21
extends:
  template: our_awesome_template.yml@templates
parameters:
  ...

为了确保脚本的版本与YAML模板的版本匹配,他们现在在管道模板中包含了一个额外的构建阶段,用于检出templates仓库,并将所有脚本放入一个用于该运行的构件中。使用“发布分支”允许他们安全地发布和测试管道的新功能和修复:团队可以按照自己的节奏升级他们的管道,旧版本仍然得到支持一段时间。

现在,他们想要开始使用Azure Artifacts来存储脚本构件,但是他们想知道“我应该从Azure Artifacts下载哪个版本的脚本?”对于我来说,resources块中包含的信息很有用,但是我似乎无法使用表达式或预定义变量来访问它。我目前唯一能想到的解决方案是使用az pipelines cli。你有什么想法吗?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据Azure Pipelines的文档,你可以使用以下方法来获取资源的属性:

variables:
  templates.ref: $[ resources.repositories['templates'].ref ]

具体请参考Repository Details文档

方案2

请注意,这个方案需要在YAML中使用条件语句,并且需要确保资源的名称正确设置。
另一种方法是通过在步骤中使用条件语句来强制资源的名称。例如,你可以添加一个步骤,并使用条件condition: eq(variables['templates.ref'], '')来检查templates.ref变量是否为空。如果为空,可以抛出一个错误消息,提示用户将引用的仓库命名为template

- script: |
    if [ -z "$(templates.ref)" ]; then
      echo "Please name the referenced repository as 'template'"
      exit 1
    fi
  condition: eq(variables['templates.ref'], '')

以上是两种获取Azure Pipelines运行中资源信息的方法。你可以根据自己的需求选择适合的方法。

希望对你有帮助!

正文完