Azure Pipeline多仓库配置下Build_Dev阶段触发条件失效问题咨询
问题根因
该问题由Azure DevOps Pipeline的变量求值时机差异导致:
- 阶段(stage)的
condition默认使用编译时求值逻辑,会在Pipeline初始化、还未开始执行任何阶段任务时就完成条件判断,此时Build.Repository.Name还未被赋值为触发管道的实际仓库值(如果你的YAML文件存放在PipelineRepo仓库中,编译时该变量的取值是pipeline-config,永远不等于Test,因此条件永远不成立,阶段被跳过)。 - Info阶段输出的变量是在运行时(步骤执行阶段)展开的,所以能拿到触发管道的
Test仓库的正确值,和阶段条件的求值时机完全不同。
修复方法
只需要将Build_Dev阶段的condition修改为运行时表达式,用$[]包裹原有判断逻辑即可,让条件在阶段启动前的运行时阶段再求值:
- stage: 'Build_Dev' dependsOn: Info displayName: 'Build the web application in Dev' # 改为运行时表达式即可 condition: $[eq(variables['Build.Repository.Name'], 'Test')] jobs: # 其余原有配置保持不变
修改后条件会正确读取触发仓库的实际名称,匹配为Test时就会正常执行该阶段。
内容的提问来源于stack exchange,提问作者minhtuanta
相关产品推荐
相关产品推荐

