Azure Pipeline stage条件始终返回false:判断sourceCodeChanged为true不生效
问题根因
Azure Pipeline的Stage级条件判断是在当前Stage启动调度前完成计算的,而你在当前Stage下定义的自定义变量sourceCodeChanged,需要等条件判断通过、Stage正式进入执行流程后才会完成赋值。所以你在条件中引用这个尚未完成赋值的变量时,实际拿到的是空值,对比'true'自然永远返回false。
你添加的调试步骤能正常打印true,也验证了这一点:调试步骤执行时Stage已经启动,变量已经完成了赋值,所以输出正常。
解决方案
直接在条件中引用前序Stage的输出变量,不需要通过当前Stage的自定义变量中转,修改后的配置如下:
- stage: build dependsOn: determineChanges condition: and(succeeded(), eq(stageDependencies.determineChanges.checkChanges.outputs['check_changes.SOURCE_CODE_CHANGED'], 'true')) jobs: - job: buildBinaries displayName: Build Binaries steps: - bash: echo $(stageDependencies.determineChanges.checkChanges.outputs['check_changes.SOURCE_CODE_CHANGED']) displayName: TestOutPutDeleteMe #debugging step
如果后续步骤中需要频繁用到这个变量,也可以保留当前Stage的变量定义,仅修改条件判断的取值逻辑即可:
- stage: build dependsOn: determineChanges variables: sourceCodeChanged: stageDependencies.determineChanges.checkChanges.outputs['check_changes.SOURCE_CODE_CHANGED'] condition: and(succeeded(), eq(stageDependencies.determineChanges.checkChanges.outputs['check_changes.SOURCE_CODE_CHANGED'], 'true')) jobs: - job: buildBinaries displayName: Build Binaries steps: - bash: echo $(sourceCodeChanged) displayName: TestOutPutDeleteMe #debugging step
注意事项
Azure Pipeline变量是大小写敏感的,你原有调试步骤中写的是$(sourceCodechanged)(最后一个字母c小写),和变量定义的sourceCodeChanged(最后一个字母C大写)不一致,正式使用时请统一大小写避免异常。
内容的提问来源于stack exchange,提问作者Angry Red Panda
相关产品推荐
相关产品推荐

