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

Set variable group dynamically using System.PullRequest.TargetBranch

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

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

这不起作用,条件评估为 'false'。为了确认这一点,我将条件反转如下

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

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

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

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

You can use template expression syntax to expand both template parameters and variables (${{ variables.var }}). Template variables are processed at compile time, and are replaced before runtime starts. Template expressions are designed for reusing parts of YAML as templates.

Template variables silently coalesce to empty strings when a replacement value isn't found. Template expressions, unlike macro and runtime expressions, can appear as either keys (left side) or values (right side). The following is valid: ${{ variables.key }} : ${{ variables.value }}.

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

表示 no 代表 System.PullRequest.TargetBranch

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

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

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