使用System.PullRequest.TargetBranch动态设置变量组

时间:2020-09-17 15:27:34

标签: azure azure-devops yaml azure-yaml-pipelines

我试图使用azure devops在拉取请求管道中动态设置组。 Yaml文件如下所示:

variables:
 - ${{ if eq(variables['System.PullRequest.TargetBranch'], 'refs/heads/dev') }}:
   - group: dev-var-group

这不起作用,条件评估为“假”。只是为了确认这一点,我扭转了如下情况

variables:
 - ${{ if ne(variables['System.PullRequest.TargetBranch'], 'refs/heads/dev') }}:
   - group: dev-var-group

正确设置了哪个组之后,将读取所有必需的变量并进行管道工作。

任何人都可以在这里帮助您在正确的条件下工作吗?

2 个答案:

答案 0 :(得分:1)

恐怕这是不可能的。如果您在Template expression syntax处查看here

您可以使用模板表达式语法来扩展模板参数和变量($ {{variables.var}}。模板变量在编译时进行处理,并在运行时开始之前被替换。模板表达式旨在将YAML的一部分作为模板重用。

当找不到替换值时,模板变量将默默地合并为空字符串。与宏和运行时表达式不同,模板表达式可以显示为键(左侧)或值(右侧)。以下是有效的:$ {{variables.key}}:$ {{variables.value}}。

要使此功能正常运行,您需要一个模板变量,而System.PullRequest.TargetBranch是运行时变量,因此将其替换为空字符串。如果您检查预定义变量here,则会注意到最后一列Available in templates?

enter image description here

其中no代表System.PullRequest.TargetBranch

答案 1 :(得分:0)

也许足以评估 Build.Reason 是否在模板中可用?

您也可以在运行时检查拉取请求源分支并基于此分配变量。即:

Write-Host “##vso[task.setvariable variable=testvar;]testvalue”).