1

我正在尝试使用 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

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

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

4

2 回答 2

2

恐怕这是不可能的。如果你看这里Template expression syntax

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

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

要让它工作,你需要一个模板变量System.PullRequest.TargetBranch,它是运行时变量,因此它被替换为空字符串。如果您在此处检查预定义变量,您会注意到最后一列Available in templates?

在此处输入图像描述

no它说System.PullRequest.TargetBranch

于 2020-09-17T22:29:10.057 回答
0

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

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

Write-Host “##vso[task.setvariable variable=testvar;]testvalue”).
于 2021-01-22T02:03:35.007 回答