问题描述
在使用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运行中资源信息的方法。你可以根据自己的需求选择适合的方法。
希望对你有帮助!