如何重新部署Azure Web App ARM模板而不重置已部署应用
解决ARM模板部署重置Web App应用的问题
核心原因
Incremental模式下,若ARM模板中Microsoft.Web/sites资源未明确规避应用部署相关属性,Azure会默认重置部分站点配置(比如部署关联的设置、默认文档列表等),导致已发布的应用被覆盖为默认蓝屏页面。
具体修复方案
1. 精简ARM模板中Web App的配置范围
编辑Microsoft.Web/sites资源定义时,只保留基础设施级的配置项,剔除所有与应用部署、代码发布相关的属性:
- 不要在
siteConfig里定义WEBSITE_RUN_FROM_PACKAGE这类部署模式配置 - 若已通过应用流水线设置过
defaultDocuments、appSettings(非基础设施相关),不要在模板中重复定义 - 运行时版本(如
netFrameworkVersion)如果已和应用匹配,无需在模板中指定(除非你确实需要更新版本)
示例模板片段:
{ "type": "Microsoft.Web/sites", "apiVersion": "2022-09-01", "name": "[parameters('webAppName')]", "location": "[parameters('location')]", "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]", "siteConfig": { "alwaysOn": true, "http20Enabled": true // 仅保留基础设施类配置,移除部署相关内容 } } }
2. 明确划分流水线职责
严格区分两类流水线的作用边界:
- 基础设施流水线:仅负责管理App Service Plan、Web App的基础属性(如区域、实例规模、网络绑定等),绝不触碰应用代码、部署包相关的任何配置
- 应用部署流水线:专门处理代码构建、发布,以及应用专属配置(如业务相关的连接字符串、appSettings)
3. 提前验证部署变更
执行正式部署前,用Azure CLI预览变更内容,确认不会修改应用相关属性:
az deployment group validate --resource-group <你的资源组名> --template-file <模板路径> --parameters <参数文件路径>
4. 禁用SCM站点停止配置
确保模板中未设置scmSiteAlsoStopped: true,该配置会停止部署相关的SCM服务,导致应用重置。若必须定义,设为false或直接省略该属性。
内容的提问来源于stack exchange,提问作者Alper Silistre
相关产品推荐
相关产品推荐

