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

How to allow an empty string for a runtime parameter?

我刚开始在 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: ....

为什么 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 }}

这产生:

myString value is '' Its length is 0 is it null or empty? True Is it null or whitespace? True

这真是奇怪。但是,如果您将 '' 改为 space ' ',您将能够触发管道,甚至从字段中删除 space。

根据 the documentation,“参数不能是可选的”。

将 space ' ' 作为默认值将起作用(如 Krzysztof 建议的那样),但 space 将保留在该字段中。如果删除字段中的 space 使得没有文本值,则当管道为 运行.

时将使用默认值 ' '

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

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

steps:
- script: |
    echo ">>${{ parameters.myString }}<<"

它将产生:

>> <<

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