如何允许运行时参数为空字符串?

Wal*_*Vos 11 azure-devops azure-pipelines azure-pipelines-yaml

我刚刚开始使用 Azure Pipelines 中的运行时参数,有些东西我不太明白。考虑这个 Azure Pipelines YAML:

parameters:
- name: deployEnvironment
  displayName: Select your target environment.
  type: string
  default: Build_only
  values:
  - Build_only
  - TST
  - PP
  - P
- name: releaseName
  type: string
  default: ''

steps:
- task: ....
Run Code Online (Sandbox Code Playgroud)

为什么 releaseName 是必需参数?我希望通过指定default: ''将其留空是可选的。文档没有提到是否可以将参数设为可选。

图片

跟进 Kryzstof 的回答,我进一步试验,似乎只包含空格的字符串被解释为空:

似乎这个单个空格被解释为空(我也尝试过多个空格)。

parameters:
- name: myString
  type: string
  default: ' '

steps:
- task: PowerShell@2
  inputs:
    targetType: inline
    script: |
      $MS = $ENV:MS
      Write-Host "myString value is '$MS'"
      Write-Host "Its length is $($MS.Length)"
      Write-Host "is it null or empty? $([System.String]::IsNullOrEmpty($MS))"
      Write-Host "Is it null or whitespace? $([System.String]::IsNullOrWhiteSpace($MS))"
  env:
    MS: ${{ parameters.myString }}
Run Code Online (Sandbox Code Playgroud)

这产生:

myString 值是 '' 它的长度是 0 是 null 还是空?True 它是空值还是空格?真的

Krz*_*tof 17

这真的很奇怪。但是,如果您放置而不是''空间,' '您将能够触发管道,甚至从字段中删除该空间。

使用运行时参数构建

  • 似乎此解决方法不再有效 - 空格不再算作该字段中的文本。@WalterVos 自此之后您找到了另一个解决方案吗? (4认同)
  • 它实际上是有效的,如果在管道 YAML 中默认设置为 '''`,但是当设置为 '''` 时,触发管道时无法将单个空格设置为参数值。 (4认同)

pji*_*ers 14

根据文档,“参数不能是可选的”。

将空格设置' '为默认值将起作用(正如Krzysztof建议的那样),但空格将保留在字段中。如果删除字段中的空格,从而没有文本值,则' '运行管道时将使用默认值。


小智 5

运行时参数的单个空格不会被解释为空。在作者演示的示例中,运行时参数首先传递给环境变量MS。此步骤可以修剪前导和尾随空格。这就是为什么MS是空字符串。如果尝试这个:

parameters:
- name: myString
  type: string
  default: ' '

steps:
- script: |
    echo ">>${{ parameters.myString }}<<"
Run Code Online (Sandbox Code Playgroud)

它将产生:

>> <<
Run Code Online (Sandbox Code Playgroud)

无论如何,通过环境变量将运行时参数传递给脚本是修剪空格的一个很好的解决方法。否则,我们必须处理脚本中的空格问题。