提供具有默认值的管道队列时间变量

时间:2019-10-17 11:48:54

标签: azure-devops azure-pipelines

在Azure Pipelines中,您可以set pipeline variables at queue time。您可以使用与管道本身定义的变量相同的方式使用此类变量。

示例:

# pipeline.yml
steps:
- checkout: none
- template: steps/some.yml
  parameters:
    name: $(queueTimeVar)

# steps/some.yml
parameters:
  name: 'World'

steps:
  - bash: |
      echo "Hello ${{ parameters.name }}!"

但是,如果未显式设置变量,则管道会将此表达式评估为字符串本身。步骤模板将用name: '$(queueTimeVar)'调用并打印Hello $(queueTimeVar)!

如果未设置变量,如何设置默认值?


我尝试将默认值添加为变量,但未按预期工作。

variables:
  queueTimeVar: MyDefault

此后,队列时间变量无效。该变量始终是YAML值。

作为解决方法,我必须向使用该值的每个任务添加默认处理。

# bash task
value="MyDefault"
if [ -n "$QUEUETIMEVAR" ]; then
  value="$QUEUETIMEVAR"
fi

1 个答案:

答案 0 :(得分:2)

  

如果未设置变量,如何设置默认值?

如果您的意思是不在任何地方设置此变量queueTimeVar,包括在触发器页面的“变量”选项卡或YAML配置页面的“变量”选项卡中。不幸的是,不,没有显式设置变量,服务器不知道从哪里获取该值。

直到现在,如果您使用的管道配置类型为YAML,则服务器只能识别在三个位置定义的变量:(1) YAML脚本中的变量块,( 2)配置面板中的“变量”面板,在“触发器”设置中为(3)变量选项卡。

enter image description here

服务器无法识别在这三个位置之一中未定义的任何变量,即使仅在以下位置创建一个新变量:

enter image description here

总之,如果您只是在队列时间内创建一个新变量,而没有首先在该三个位置定义它,那么服务器仍然无法识别该变量及其值。

因此,您必须在我前面提到的位置之一中设置变量。否则管道将无法得到它。