将变量传递到模板参数中

时间:2020-07-27 22:33:31

标签: azure-devops

我有一个模板,该模板具有boolean类型的参数'enableVM1'。

简而言之,我希望通过表达式设置此参数。我希望此表达式在运行时处解析,因为数据是通过较早的步骤检索的。

  - stage: Build_Tenant_Refresh
    displayName: "Destroying Tenant VM"
    variables:
       vm1ActiveFlip: $[ not(eq(stageDependencies.Shutdown_Tenant.Setup.outputs['Identify_built_VM.vm1Active'],'True')) ] 
    jobs:
    - template: tenant-infrastructure-plan.yml
      parameters:
         enableVM1: <<ANY EXPRESSION WHICH I'D EXPECT TO RESOLVE TO A BOOL>>

当我按下管道上的运行按钮时,我立即被告知enableVM1s的值不是布尔值。 这表明a参数是在解析/编译时而不是运行时评估的。这是真的吗?

我希望表达式为:$ [vm1ActiveFlip](引用在此阶段定义的变量)。

我尝试了很多表达式的变体,包括:

$ [eq('vm1ActiveFlip','True')] $ [eq('True','True')]

能否实现我所需要的?

1 个答案:

答案 0 :(得分:1)

我测试了enableVM1: $[eq(variables['Build.SourceBranch'],'refs/heads/main')]并复制了您的问题:

enter image description here

要解决此问题,您需要使用编译时表达式(${{ <expression> }})。这是因为如果使用运行时表达式,则在单击运行按钮时,该表达式尚未被解析为布尔值,而是被判断为字符串。

在编译时表达式(${{ <expression> }})中,您可以访问parameters和静态定义的variables。在运行时表达式($[ <expression> ]中,您可以访问更多variables,但没有参数。

document中对此有所说明,请参考。

更新:

作为解决方法,使用作业输出变量并向模板中引入dependsOn。有关详细信息,请参阅此document