16

我刚刚开始使用 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 值为 '' 它的长度为 0 是 null 还是空?True 它是空值还是空格?真的

4

3 回答 3

18

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

使用运行时参数构建

于 2020-04-09T05:01:46.600 回答
3

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

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

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

它将产生:

>> <<

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

于 2021-07-05T03:14:17.050 回答
2

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

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

于 2021-01-29T05:37:20.547 回答