Azure Pipeline基于前置任务输出变量设条件报dependencies未识别
问题原因
Azure Pipeline 条件表达式可访问的上下文对象,和条件声明的层级严格绑定:
dependencies对象仅支持在 Job(作业)层级、Stage(阶段)层级 的条件中访问,Task(步骤)层级的执行上下文不存在该对象。你当前把引用dependencies的条件直接写在了JobB下的PowerShell任务步骤上,这就是抛出Unrecognized value: 'dependencies'错误的直接原因。- 你预判的StageB条件不会触发同类错误:该条件声明在Stage层级,天然支持访问
stageDependencies对象,且你已经配置了dependsOn: StageA建立依赖关系,语法层面是合法的。唯一需要注意的是,如果后续要在StageB下的具体Task步骤中引用跨阶段输出变量,同样不能直接在Task层写stageDependencies,需要先在对应Job的变量块中做映射,再引用本地变量。
修复方案
你的核心需求是通过JobA的输出变量控制JobB作业是否运行,直接把Task上的条件上移到JobB的定义层级即可,Job层级可以正常识别dependencies对象,和你当前dependsOn: JobA的配置完全匹配。
如果你后续有「Job正常启动、仅控制单个步骤是否运行」的需求,只需要先在Job的variables块中把上游输出变量映射为当前Job的本地变量,再在Task条件中引用本地变量即可。
修复后完整可用YAML
trigger: - none pool: vmImage: 'windows-latest' variables: varBoolA: true varBoolB: false stages: - stage: StageA jobs: - job: JobA displayName: JobA steps: - task: PowerShell@2 displayName: "PS 1" name: PSA inputs: targetType: inline script: | echo "##vso[task.setvariable variable=varBoolA;isOutput=true]true" echo "variable varBoolA ${{ variables.varBoolA }}" - job: JobB dependsOn: JobA displayName: JobB # 条件移至Job层级,可正常访问dependencies对象 condition: and(succeeded(), eq(dependencies.JobA.outputs['PSA.varBoolA'], 'true')) steps: - task: PowerShell@2 displayName: "PS 2" name: PSB inputs: targetType: inline script: | echo "##vso[task.setvariable variable=varBoolB;isOutput=true]false" echo "variable varBoolB ${{ variables.varBoolB }}" - stage: StageB dependsOn: StageA # Stage层级条件可正常访问stageDependencies,无需修改 condition: and(succeeded(), eq(stageDependencies.StageA.JobA.outputs['PSA.varBoolA'], 'true')) jobs: - job: JobC displayName: JobC steps: - task: PowerShell@2 displayName: "PS 3" name: PSC inputs: targetType: inline script: | echo "Stage B"
内容的提问来源于stack exchange,提问作者Dragon
相关产品推荐
相关产品推荐

