我对 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)
工作,但在我的情况下不行。如何使用变量切换到不同的模板?
表达式文档中,它提到作为表达式的一部分,您可以使用两种语法之一访问变量:
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 }}