如何在Azure发布管道的阶段间共享ARM输出?
Azure DevOps跨阶段传递ARM输出的实现步骤
1. 阶段1:将ARM输出转为跨阶段可访问的变量
在阶段1的ARM Output任务中配置输出变量:
- 编辑该任务,找到「Output variables」区域
- 为需要传递的ARM输出项勾选「Set as pipeline variable」,并指定变量名(例如
storageAccountName),这样输出值会被保存为管道级变量 - 若需要传递多个输出,重复上述操作给每个输出设置独立变量
2. 确认阶段依赖关系
在发布管道的阶段设置中,确保阶段2的「Depends on」选项已选中阶段1,保证阶段2在阶段1执行完成后启动,确保变量已生成。
3. 阶段2:在ARM模板中引用传递的变量
在阶段2的ARM模板部署任务中,通过以下方式引用变量:
- 参数传递法:先在ARM模板里定义对应参数,然后在部署任务的「Override template parameters」中,用
-TargetParameterName $(storageAccountName)的格式传入变量值 - 直接引用法:如果模板支持管道变量,可直接在模板里用
[variables('storageAccountName')]引用,或者在部署任务的「Additional parameters」中指定变量
备选方案(手动设置输出变量)
如果ARM Output任务无法直接设置管道变量,可添加一个PowerShell/Bash任务来处理:
- 在阶段1的ARM Output任务后添加PowerShell任务,通过
$(armOutputTaskReferenceName.outputName)获取输出值(armOutputTaskReferenceName是ARM Output任务的「Reference name」) - 执行命令:
echo "##vso[task.setvariable variable=crossStageVar;isOutput=true;]$outputValue",将值设为作业输出变量 - 阶段2中通过
$(阶段1.作业名.crossStageVar)的格式访问该变量
内容的提问来源于stack exchange,提问作者Alejandro Alvarez
相关产品推荐
相关产品推荐

