Azure Yaml DevOps 变量处理
Azure Yaml DevOps variable handling
所以我有一个 YAML 文件,我正在尝试执行以下操作:
# top of the file, declare global variables
variables:
- name: MyName
value: 'apple'
...
parameters:
- name: SwitchName
type: boolean
default: false
...
stages:
- stage: Build
displayName: 'Build'
...
jobs:
variables:
- ${{ if eq(parameters.SwitchName, true) }}:
- name: MyName
value: '$(MyName)_pie'
...
steps:
- task: PowerShell@1
inputs:
scriptType: inlineScript
inlineScript: |
Write-Output $(MyName)
...
#end of script
目标是控制管道在默认 运行 和 apple_pie
中打印 apple
当用户在 UI 中选择该参数为真时。
我知道参数是编译时的,变量是 运行 时的。我知道要覆盖全局变量,您可以在作业级别创建一个变量并根据需要更改它。遗憾的是,模板的工作方式不允许我正确地重新声明该变量,我最终得到 $(MyName)_pie
。出于某种原因,Yaml 无法看到在该模板中有一个需要定义的 运行time 变量。
我有哪些选择可以实现所需的行为?
我的理解有什么遗漏吗?
您可以更改为使用 ${{ variables.MyName }}
在根级别调用变量。
例如:
variables:
- name: MyName
value: 'apple'
parameters:
- name: SwitchName
type: boolean
default: false
stages:
- stage: Build
displayName: 'Build'
jobs:
- job: A
variables:
- ${{ if eq(parameters.SwitchName, true) }}:
- name: MyName
value: '${{ variables.MyName }}_pie'
steps:
- script: "echo $(MyName)"
结果:
由于您使用 if 表达式重新赋值,变量将在编译时赋值。
参考这个文档:Runtime expression syntax
可以使用模板表达式格式:${{ variables.var }}
所以我有一个 YAML 文件,我正在尝试执行以下操作:
# top of the file, declare global variables
variables:
- name: MyName
value: 'apple'
...
parameters:
- name: SwitchName
type: boolean
default: false
...
stages:
- stage: Build
displayName: 'Build'
...
jobs:
variables:
- ${{ if eq(parameters.SwitchName, true) }}:
- name: MyName
value: '$(MyName)_pie'
...
steps:
- task: PowerShell@1
inputs:
scriptType: inlineScript
inlineScript: |
Write-Output $(MyName)
...
#end of script
目标是控制管道在默认 运行 和 apple_pie
中打印 apple
当用户在 UI 中选择该参数为真时。
我知道参数是编译时的,变量是 运行 时的。我知道要覆盖全局变量,您可以在作业级别创建一个变量并根据需要更改它。遗憾的是,模板的工作方式不允许我正确地重新声明该变量,我最终得到 $(MyName)_pie
。出于某种原因,Yaml 无法看到在该模板中有一个需要定义的 运行time 变量。
我有哪些选择可以实现所需的行为? 我的理解有什么遗漏吗?
您可以更改为使用 ${{ variables.MyName }}
在根级别调用变量。
例如:
variables:
- name: MyName
value: 'apple'
parameters:
- name: SwitchName
type: boolean
default: false
stages:
- stage: Build
displayName: 'Build'
jobs:
- job: A
variables:
- ${{ if eq(parameters.SwitchName, true) }}:
- name: MyName
value: '${{ variables.MyName }}_pie'
steps:
- script: "echo $(MyName)"
结果:
由于您使用 if 表达式重新赋值,变量将在编译时赋值。
参考这个文档:Runtime expression syntax
可以使用模板表达式格式:${{ variables.var }}