我正在尝试向我们的 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 表达式中使用它会导致编译错误:
- ${{ if ne(dbName, null) }}:
阅读文档表明我可以这样做:
- ${{ if dbName }}:
但是,当上面的代码编译时,它继续将 null 视为字符串“null”,并落入下面的 powershell 步骤。
如何设置才能使 YAML 识别出我创建了空值并成功检查它?
检查长度似乎是执行此操作的最佳方法,如果您尝试检查对象上的参数,您可能会遇到:
不支持类型“Null”。 length 函数仅支持数组、字符串、字典或集合。
解决此问题的方法是进行连接:
- ${{ if eq(length(join('', dbObject.dbName)), 0) }}: