模板条件,使用 Agent.OS | AGENT_操作系统

pie*_*cia 3 azure-pipelines azure-pipelines-yaml

我想包含一个取决于变量 Agent.OS 的模板:

...
steps:
  - ${{ if eq(variables['Agent.OS'], 'Linux') }}:
    - template: /templates/prepare-tool.yaml
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。我在步骤列表中没有看到此步骤。我也尝试过:

  - ${{ if eq(variables.AGENT_OS, 'Linux') }}:
Run Code Online (Sandbox Code Playgroud)

结果一样。

也许我错了,但是:

运行时和编译时表达式语法之间的区别主要在于可用的上下文。在编译时表达式 (${{ }}) 中,您可以访问参数和静态定义的变量。在运行时表达式 ($[ ]) 中,您可以访问更多变量,但不能访问参数。

所以,我必须使用- $[ if eq(...这个变量,它不是静态的,但它也不起作用:

意外值 '$[ if eq(variables.

我不知道如何使用这种变量。

根据我在 stackoverflow 上发现的内容(例如12),这是不可能的。

Leo*_*SFT 7

模板条件,使用 Agent.OS | AGENT_操作系统

是的你是对的。没有现成的方法可以做到这一点。

由于该变量的值Agent.OS是运行时变量,因此在运行作业之前我们无法使用它。

并且该变量${{ if eq(variables['Agent.OS'], 'Linux') }}是编译时变量。所以, 因此,条件的判断结果始终是失败。

要解决此问题,您可以将条件添加到每个步骤的模板中,例如:

steps:
- script: echo Sometimes this happens!
  condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
Run Code Online (Sandbox Code Playgroud)