Azure DevOps YAML变量模板条件求值为Null问题咨询
问题根本原因
- 你在模板条件(
${{ }}语法)中调用了仅运行时可用的变量。system.pullRequest.targetBranch属于Azure DevOps运行时内置变量,在流水线编译解析阶段(也就是模板表达式求值的阶段)还没有被赋值,值为Null,所以你的第二个if判断直接不成立,对应的is_sandbox和bob变量压根不会被定义,自然在后续job条件中取值为Null。 - 即使触发了第一个
if条件(源分支是feature开头),你的job条件判断也存在类型匹配问题。模板中定义的is_sandbox值true会被识别为字符串类型,你在条件中写eq(variables.is_sandbox, true)是和布尔值比较,结果也会为False,需要改为eq(variables.is_sandbox, 'true')才能正确匹配。
修复方案
你可以把条件判断改为运行时判断,对应调整语法即可:
- 变量定义改为运行时表达式:
variables: is_sandbox: $[or(startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/'), eq(variables['system.pullRequest.targetBranch'], 'refs/heads/master'))] bob: $[if(eq(variables['system.pullRequest.targetBranch'], 'refs/heads/master'), 'a', '')]
- 对应修改job的判断条件:
condition: or(eq(variables.is_sandbox, 'true'), eq(variables.bob, 'a'))
内容的提问来源于stack exchange,提问作者simon_dmorias
相关产品推荐
相关产品推荐

