如何允许运行时参数为空字符串?
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。否则,我们必须处理脚本中的空白问题。
我刚开始在 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。否则,我们必须处理脚本中的空白问题。