Azure Pipelines同阶段部署作业间传递输出变量如何动态指定VM名
解决方案
方案1:调整输出变量声明层级(最稳妥)
直接在producer作业层级声明输出,跳过VM资源前缀绑定,不需要硬编码虚拟机名称:
- 修改producer作业配置,新增作业级输出声明:
jobs: - deployment: producer environment: name: ${{ parameters.environment }} resourceType: VirtualMachine tags: ${{ parameters.tags }} # 新增作业级输出段,将步骤输出提升到作业层级 outputs: myOutputVar: $[ steps.setvarStep.myOutputVar ] strategy: runOnce: deploy: steps: - script: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value" name: setvarStep - script: echo $(setvarStep.myOutputVar) name: echovar
- 修改consumer作业的变量读取逻辑,直接读取作业级输出,无需带
deploy_xxx资源前缀:
- deployment: consumer_deploy dependsOn: producer variables: myVarFromDeploymentJob: $[ dependencies.producer.outputs['myOutputVar'] ] environment: name: ${{ parameters.environment }} resourceType: VirtualMachine tags: ${{ parameters.tags }} strategy: runOnce: deploy: steps: - script: "echo $(myVarFromDeploymentJob)" name: echovar
方案2:动态拼接表达式(无需修改producer配置)
如果不想调整原有producer的配置,可全部用运行时表达式拼接路径,不要混用$( )宏变量语法:
variables: myVarFromDeploymentJob: $[ dependencies.producer.outputs[format('deploy_{0}.setvarStep.myOutputVar', variables['Agent.MachineName'])] ]
该写法将虚拟机名称的读取、路径拼接全部放在运行时表达式内部处理,避免了解析顺序冲突导致的变量为空问题。
内容的提问来源于stack exchange,提问作者StuartvdLee
相关产品推荐
相关产品推荐

