模板条件,使用 Agent.OS | AGENT_OS

Condition for template, using Agent.OS | AGENT_OS

我想根据变量包含一个模板 Agent.OS:

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

但这不起作用。我没有在步骤列表中看到此步骤。 我也试过了:

  - ${{ if eq(variables.AGENT_OS, 'Linux') }}:

同样的结果。

也许我错了,但是:

The difference between runtime and compile time expression syntaxes is primarily what context is available. In a compile-time expression (${{ }}), you have access to parameters and statically defined variables. In a runtime expression ($[ ]), you have access to more variables but no parameters.

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

Unexpected value '$[ if eq(variables.

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

根据我在 Whosebug 上的发现(例如 , 2),这是不可能的。

Condition for template, using Agent.OS | AGENT_OS

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

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

而变量${{ if eq(variables['Agent.OS'], 'Linux') }}是一个compile-time变量。所以, 所以,条件的判断结果总是失败。

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

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