Azure DevOps管道${{ if eq() }}无法读取父yaml变量如何正确引用
问题原因
Azure DevOps 管道存在两种不同的变量解析时机:
${{ }}属于编译时表达式,在管道启动前、模板解析展开阶段就会执行$(AAA)属于运行时变量语法,只有管道实际运行到对应步骤时才会解析取值
你在编译时表达式里用了运行时的变量写法,自然无法正常读取到变量值。
正确写法
编译时表达式中引用变量直接用 variables.变量名 或者 variables['变量名'] 格式即可,修改后的test.yml代码如下:
steps: - script: | echo $(AAA) - ${{ if eq(variables['AAA'], '123') }}: - script: | echo OK
额外注意事项
如果你的变量是运行时才生成的(比如某个步骤输出的变量、或者手动触发管道时输入的变量没有设置编译时可见),这种编译时if判断是不会生效的,这时你需要改用运行时的条件判断,给步骤加condition属性:
steps: - script: | echo $(AAA) - script: | echo OK condition: eq(variables['AAA'], '123')
内容的提问来源于stack exchange,提问作者Shuhui Ke US
相关产品推荐
相关产品推荐

