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 }}