如何在Azure Pipeline YAML部署阶段间正确传递变量?
Azure DevOps部署作业跨阶段传递变量问题解决
你遇到的问题核心是部署作业的输出变量引用路径和普通作业不同,因为部署作业包含部署策略(比如你用的runOnce),变量会被挂载到策略的步骤层级下,直接按普通作业的方式引用找不到。
问题根源
普通作业的输出变量路径是 stageDependencies.<阶段名>.<作业名>.outputs['<步骤名>.<变量名>'],但部署作业因为有策略(如runOnce)和对应的步骤集(deploy),变量的完整路径需要包含这些层级:stageDependencies.<阶段名>.<部署作业名>.outputs['<策略名>.<步骤集名>.<步骤名>.<变量名>']
修正方案
修改StageB中myOutputVar2的变量引用,加上runOnce.deploy层级:
myOutputVar2: $[stageDependencies.One.B1.outputs['runOnce.deploy.setvarStepTwo.myOutputVarTwo']]
修正后的完整YAML代码
stages: - stage: StageA jobs: - job: A1 steps: - pwsh: echo "##vso[task.setvariable variable=RunStageB;isOutput=true]true" name: setvarStep - bash: echo $(System.JobName) - stage: One jobs: - job: A steps: - bash: echo "##vso[task.setvariable variable=MyVar;isOutput=true]this is a simple job" name: ProduceVar - bash: echo $(ProduceVar.MyVar) name: echovar - deployment: B1 environment: Development strategy: runOnce: deploy: steps: - script: echo "##vso[task.setvariable variable=myOutputVarTwo;isOutput=true]this is the second deployment variable value" name: setvarStepTwo - bash: echo $(setvarStepTwo.myOutputVarTwo) name: echovar1 - stage: StageB dependsOn: - StageA - One variables: myOutputVar: $[stageDependencies.StageA.A1.outputs['setvarStep.RunStageB']] myOutputVar1: $[stageDependencies.One.A.outputs['ProduceVar.MyVar']] myOutputVar2: $[stageDependencies.One.B1.outputs['runOnce.deploy.setvarStepTwo.myOutputVarTwo']] jobs: - deployment: B2 pool: vmImage: 'ubuntu-latest' environment: envB strategy: runOnce: deploy: steps: - bash: echo $(myOutputVar) - bash: echo $(myOutputVar1) - bash: echo $(myOutputVar2)
验证你的测试场景
修改后以下场景都能正常工作:
- 阶段(部署作业)→ 阶段(简单作业)
- 阶段(部署作业)→ 阶段(部署作业)
内容的提问来源于stack exchange,提问作者Samiran Mondal
相关产品推荐
相关产品推荐

