【发布时间】:2022-02-04 14:05:08
【问题描述】:
我正在尝试向我们的 YAML 管道之一添加一个选项,该选项允许用户设置项目的哪些部分将部署和不部署。为此,我根据用户的复选框选择设置变量,如下所示:
variables:
- template: variables.yml
- name: deliverStageOne
${{ if eq(parameters.DeliverStageOne, 'False') }}:
value: ''
${{ if eq(parameters.DeliverStageOne, 'True') }}:
value: 'STAGE_ONE'
该过程的下一部分将所有这些变量作为一个名为 dbNames 的数组,并使用 for 循环使用相同的代码块处理每个变量:
steps:
- ${{ each dbName in parameters.dbNames }}:
- ${{ if ne(dbName, '') }}:
- powershell: [powershell command]
我遇到的麻烦是上述循环中的条件似乎永远不会起作用 - 它总是评估为 True。
我尝试将值设置为 x 并使用
- ${{ if ne(dbName, 'x') }}:
即使我用 echo 检查了 dbName 的值并确认它是 x,它的计算结果也是 true。
所以我认为这与 YAML 处理字符串的方式有关,而且由于 '' 无论如何都是笨拙的语法,我认为将其设置为 null 会更好更清晰:
${{ if eq(parameters.DeliverStageOne, 'False') }}:
value: null
在 ne 表达式中使用 this 会导致编译错误:
- ${{ if ne(dbName, null) }}:
阅读文档表明我可以这样做:
- ${{ if dbName }}:
但是,虽然上面的代码编译了,但它继续将 null 视为字符串“null”并落入下面的 powershell 步骤。
我该如何设置,以便 YAML 识别出我创建了一个空值并成功检查它?
【问题讨论】:
标签: null yaml azure-pipelines azure-pipelines-release-pipeline azure-pipelines-yaml