在 Azure Pipeline YAML 中设置和检查 null

问题描述 投票:0回答:2

我正在尝试向我们的 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 yaml azure-pipelines azure-pipelines-release-pipeline azure-pipelines-yaml
2个回答
2
投票

对于参数,支持多种数据类型。请参阅链接

但对于变量来说,它们始终是字符串数据类型,带或不带引号。换句话说,

''
被评估为空字符串,但不为 null。请参阅链接

由于 Azure Pipelines 中所有变量都被视为字符串,因此空字符串在此管道中相当于 null。

相反,尝试使用此语法来测试变量在您的情况下是否为空字符串:

- ${{ if eq(length(dbName), 0) }}:

0
投票

检查长度似乎是执行此操作的最佳方法,如果您尝试检查对象上的参数,您可能会遇到:

不支持类型“Null”。 length 函数仅支持数组、字符串、字典或集合。

解决此问题的方法是进行连接:

- ${{ if eq(length(join('', dbObject.dbName)), 0) }}:
© www.soinside.com 2019 - 2024. All rights reserved.