You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:30:05