提问人:user2572309 提问时间:11/9/2023 更新时间:11/10/2023 访问量:71
Azure DevOps管道变量格式用法
Azure DevOps Pipeline variables format usage
问:
我在Azure DevOps管道中的变量方面遇到了问题。我无法在 if 语句中有效地使用它们,也无法将其用作值参数中的占位符。
这是一个相关的问题,但答案对我不起作用。
我在顶级管道 .yml 文件中定义了一个这样的变量。
variables:
- name: artifact_source
readonly: true
value: 'ecu'
- name: artifact_getter
readonly: true
value: 'get_artifacts_ecu.yaml'
在较低级别的模板文件中,我想像这样使用它们:
# Get binaries
- template: $(artifact_getter)
parameters:
variant: ${{ parameters.variant }}
给我这个错误:在存储库中找不到文件 /.azuredevops/template/$(artifact_getter)。
或
jobs:
- job: ${{ parameters.variant }}
pool: ${{ parameters.pool }}
steps:
# Clean checkout
- checkout: self
clean: true
# Get binaries
- ${{ if eq( $(artifact_source), 'ecu') }}:
- template: get_artifacts_ecu.yml
parameters:
variant: ${{ parameters.variant }}
这给出了一个错误:无法识别的值:“$”。位于表达式中的位置 5:eq( $(artifact_source), 'ecu')。如需更多帮助,请参阅 https://go.microsoft.com/fwlink/?linkid=842996
我想知道我应该使用什么格式来获取此处变量的值。我看到了如何引用变量的不同形式:
${{ variables.artifact_source }}
$[variables.var]
$env:artifact_source
$(artifact_source) # only one working for variables
此处也记录了此内容。但我只能去上班,但就我而言不行。$(name)
如何使用变量切换到其他模板?
答:
0赞
Miao Tian-MSFT
11/10/2023
#1
在表达式文档中,它提到作为表达式的一部分,您可以使用以下两种语法之一访问变量:
- 索引语法:
variables['MyVar']
- 属性取消引用语法:
variables.MyVar
所以,你可以使用或这里。eq(variables['artifact_source'], 'ecu')
eq(variables.artifact_source, 'ecu')
# Get binaries
- ${{ if eq(variables['artifact_source'], 'ecu') }}:
- template: get_artifacts_ecu.yml
parameters:
variant: ${{ parameters.variant }}
或
# Get binaries
- ${{ if eq(variables.artifact_source, 'ecu') }}:
- template: get_artifacts_ecu.yml
parameters:
variant: ${{ parameters.variant }}
评论
0赞
user2572309
11/10/2023
谢谢你的推理,我想我被各种格式搞砸了。我以为我已经尝试了所有变体,但现在它起作用了。多谢!
评论