经典管道的自定义条件中的嵌套表达式

时间:2020-06-03 05:48:59

标签: azure-devops azure-pipelines

我正在尝试简化复杂的管道,其中一部分是使用自定义条件仅执行部分管道(主要是出于测试目的,也出于某些功能原因)。

我想嵌套表达式,但似乎无法使其工作,因为似乎未对变量进行求值。示例:

变量:

PerformSonar:false(可在队列时间设置)

expPerformSonar:and(succeeded(), eq(PerformSonar, true))

然后在声纳步骤中,将自定义条件设置为

eq(variables['expPerformSonar'], true) //始终为假,变量扩展为文本

我尝试了多种语法变体,尝试使用编译时和运行时表达式语法,各种事情都失败了

示例:

eq('${{ variables['expPerformSonar'] }}', true)-计算为假,变量未扩展为文本

唯一可行的方法是将完整表达式放在“自定义条件”字段中。

有什么方法可以分解条件并在经典管道的嵌套情况下使用它们?

1 个答案:

答案 0 :(得分:0)

有什么方法可以分解条件并在嵌套中使用它们 经典管道中出现什么情况?

定义expPerformSonar: and(succeeded(), eq(PerformSonar, true))不是用表达式定义变量的正确方法。

检查Expressions文档:

# Two examples of expressions used to define variables
# The first one, a, is evaluated when the YAML file is parsed into a plan.
# The second one, b, is evaluated at run time. 
# Note the syntax ${{}} for parse time and $[] for runtime expressions.
variables:
  a: ${{ <expression> }}
  b: $[ <expression> ]

无论是经典管道还是Yaml管道,如果要使用表达式定义变量。您应该选择格式${{ <expression> }}$[ <expression> ]而不是直接表达式。

这是我针对您的情况的工作示例:

1。您的变量可以是:

执行声纳false

expPerformSonar $[ eq(variables['PerformSonar'], 'true') ]

2。条件可能是:

and(succeeded(),eq(variables['expPerformSonar'], true))

Ps:建议在任务/步骤的情况下直接使用succeeded() ,而不是在定义变量时使用它。希望能有所帮助:)