我在Azure DevOps中有一个类似以下的管道:
parameters:
- name: Scenario
displayName: Scenario suite
type: string
default: 'Default'
variables:
Scenario: ${{ parameters.Scenario }}
...
steps:
- script: echo Scenario is $(Scenario)
我正在通过VSTS CLI执行管道,如下所示:
vsts build queue ... --variables Scenario=Test
运行管道时,参数默认值似乎覆盖了我的cmd行指定的变量值,并且得到了步骤输出Scenario is Default
。我尝试过类似Scenario: $[coalesce(variables['Scenario'], ${{ parameters.Scenario }})]
的操作,但是我认为语法错误,因为这引起了解析问题。
如果尚未设置Scenario
变量,仅使用参数值的最佳方法是什么?
答案 0 :(得分:1)
仅在以下情况下才使用参数值的最佳方法是什么 尚未设置方案变量?
对不起,但据我所知,您的方案在设计上不受支持。 Note here指出:
在YAML文件中设置变量时,请不要在队列编辑器中将其定义为可设置的Web编辑器。您目前无法在队列时间更改YAML文件中设置的变量。如果您需要在队列时间设置变量,请不要在YAML文件中进行设置。
--variables
中的切换命令只能 用于覆盖标记为在队列时间可设置的变量。由于yaml管道在设计上不支持Settable variables
,因此在排队yaml管道时实际上不会传递您的--variables Scenario=Test
。
以下是我的几项测试,以证明:
1.Yaml管道不支持在队列时间设置的变量:
pool:
vmImage: 'windows-latest'
variables:
Scenario: Test
steps:
- script: echo Scenario is $(Scenario)
我运行了命令vsts build queue ... --variables Scenario=Test123
,管道运行开始了,但是输出日志始终是Scenario is Test
而不是预期的Scenario is Test123
。证明不是Pipeline parameter overwrites variable value
,而是--variables Scenario=xxx
未被传递,因为yaml管道不支持Settable变量。
2。使用管道变量Scenario
创建Classic UI构建管道:
通过命令az pipelines build queue ... --variables Scenario=Test12345
对其进行排队(它具有与vsts build queue ... --variables Scenario=Test
相同的功能)只会给出以下错误:
Could not queue the build because there were validation errors or warnings.
3。然后启用此变量的Settable at queue time
选项:
再次运行相同的命令,现在它可以使构建排队。此外,它还成功用命令行中设置的新值覆盖了原始管道变量。
您可以进行类似的测试,就像我所做的那样以找出导致您遇到的行为的原因。
此外: VSTS CLI已过时,并已由Azure CLI with the Azure DevOps extension取代。因此,现在更建议使用az pipelines build queue 。
答案 1 :(得分:1)
Lance有一个很好的建议,但这是我最终解决它的方法:
- name: Scenario
displayName: Scenario suite
type: string
default: 'Default'
variables:
ScenarioFinal: $[coalesce(variables['Scenario'], '${{ parameters.Scenario }}')]
...
steps:
- script: echo Scenario is $(ScenarioFinal)
在这种情况下,我们使用coalesce
表达式来分配新变量ScenarioFinal
的值。这样,我们仍然可以通过CLI使用--variables Scenario=Test
或通过管道UI使用参数。 coalesce
将采用第一个非空值,并有效地“重新排序”链接到此处的优先顺序Lance:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#expansion-of-variables
(请注意,参数引用'${{}}'
周围必须有单引号,因为${{}}
会简单地转换为值,但是coalesce
表达式不会不知道如何解释原始值,除非原始值周围有单引号将其表示为字符串)
请注意,通过CLI设置参数的功能是此处的当前功能建议:https://github.com/Azure/azure-devops-cli-extension/issues/972