AzureResourceGroupDeployment与AzureResourceManagerTemplateDeployment是否相同?
Azure DevOps中两类ARM部署任务的差异说明
AzureResourceGroupDeployment@2 与 AzureResourceManagerTemplateDeployment@3 功能并非完全一致,二者是Azure DevOps平台上ARM/Bicep部署任务的新旧迭代版本,不属于完全相同的任务。
核心区别
- 维护状态不同
AzureResourceGroupDeployment@2是平台早期上线的旧版部署任务,目前已停止功能更新,仅做必要的安全漏洞修复,不会再适配新的Azure部署特性。AzureResourceManagerTemplateDeployment@3是官方当前主推的正式版本,所有新功能(包括Bicep新语法、新部署范围支持等)都会优先在v3版本迭代。 - 参数设计与部署范围支持不同
从提供的YAML配置就能看出明显的参数差异:- 服务连接配置逻辑:旧版v2仅通过
azureSubscription参数绑定Azure服务连接,订阅信息自动从服务连接读取,不支持灵活切换订阅;新版v3通过azureResourceManagerConnection绑定服务连接,同时支持显式传入subscriptionId指定目标订阅,适配跨订阅部署的复杂场景。 - 部署范围覆盖:旧版v2仅支持资源组这单一范围的部署,不需要单独配置部署位置参数;新版v3除资源组部署外,还支持订阅级、管理组级、租户级的ARM/Bicep部署,示例里的
location参数就是用于存储部署操作元数据的配置项,是为非资源组范围的部署场景设计的。
- 服务连接配置逻辑:旧版v2仅通过
- 功能完备度不同
新版v3原生适配全量Bicep特性,内置部署前What-If预演检查、自定义部署名称、私有Bicep模块拉取身份认证、结构化错误日志输出等能力;旧版v2的Bicep支持是后期为了兼容追加的,内置的Bicep编译器版本长期不更新,使用新语法的Bicep文件部署时很容易出现解析错误。
共性说明
在最基础的单资源组部署场景下,二者的核心执行逻辑一致:都支持增量/完整部署模式、参数文件加载、自定义参数覆写、部署输出变量传递,简单的ARM模板/早期版本Bicep文件用两个任务都能部署成功。
配置示例
# 推荐使用的v3版本任务 - task: AzureResourceManagerTemplateDeployment@3 displayName: 'deploy using AzureResourceManagerTemplateDeployment' inputs: azureResourceManagerConnection: sc subscriptionId: id resourceGroupName: rg location: $(location) csmFile: ${{ parameters.root }}/Infrastructure/data/template.bicep csmParametersFile: env.json overrideParameters: '-environmentAbbreviation "env"' deploymentMode: 'Incremental' deploymentOutputs: dataoutputs # 已停止功能更新的v2版本任务 - task: AzureResourceGroupDeployment@2 displayName: 'deploy using AzureResourceGroupDeployment' inputs: azureSubscription: ec resourceGroupName: rg csmFile: ${{ parameters.root }}/Infrastructure/data/template.bicep csmParametersFile: env.json overrideParameters: '-environmentAbbreviation "env"' deploymentMode: 'Incremental' deploymentOutputs: dataoutputs
新编写的流水线不建议再使用v2版本任务,存量使用v2任务的流水线也建议逐步迁移到v3版本,避免后续因为旧任务停止维护出现部署失败问题。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

