我有一个模板,该模板具有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')]
能否实现我所需要的?
答案 0 :(得分:1)
我测试了enableVM1: $[eq(variables['Build.SourceBranch'],'refs/heads/main')]
并复制了您的问题:
要解决此问题,您需要使用编译时表达式(${{ <expression> }}
)。这是因为如果使用运行时表达式,则在单击运行按钮时,该表达式尚未被解析为布尔值,而是被判断为字符串。
在编译时表达式(${{ <expression> }}
)中,您可以访问parameters
和静态定义的variables
。在运行时表达式($[ <expression> ]
中,您可以访问更多variables
,但没有参数。
此document中对此有所说明,请参考。
更新:
作为解决方法,使用作业输出变量并向模板中引入dependsOn。有关详细信息,请参阅此document。