You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Bicep重部署AppService时清空ZIP部署内容?

解决Bicep重新部署导致Azure App Service应用内容丢失的问题

核心原因

重新部署Bicep模板时,Azure资源管理器会严格按模板定义覆盖资源属性,包括部署中心(Deployment Center)的配置。如果模板未明确保留部署后的状态,或包含会重置部署记录的属性,就会导致应用内容被清空。

解决方案

1. 使用Bicep的ignoreChanges忽略部署相关属性

这是最直接的解决方式,通过ignoreChanges告知Azure资源管理器,后续部署时跳过指定属性的更新,保留现有状态。

在App Service资源定义中添加该配置,示例如下:

resource appService 'Microsoft.Web/sites@2023-01-01' = {
  name: appServiceName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    siteConfig: {
      // 保留你的基础配置,比如运行时版本、端口等
      linuxFxVersion: 'PYTHON|3.11'
    }
  }
  // 忽略会被部署操作修改的属性
  @ignoreChanges([
    'properties/siteConfig/scmType'
    'properties/siteConfig/appSettings'
    'properties/deploymentLocalCacheEnabled'
    'properties/webSocketsEnabled' // 若部署时会修改这类属性也可添加
  ])
}

根据实际部署场景调整ignoreChanges中的属性列表,确保覆盖所有部署过程中会变更的配置项。

2. 避免在模板中硬编码部署相关属性

如果Bicep模板中明确设置了scmType(比如设为None),重新部署时会强制覆盖DevOps部署后的配置。确保模板中不包含这类会重置部署状态的硬编码属性,让Azure保留现有值。

3. 分离基础设施与应用部署流程

将App Service等基础设施的Bicep部署,和Azure DevOps的应用内容部署拆分为独立管道:

  • 基础设施管道仅在需要调整资源配置(比如扩容计划、修改运行时)时执行
  • 应用部署管道仅负责推送代码/内容,不触碰基础设施模板
    从流程上彻底避免两者冲突。

4. 借助部署槽位隔离状态

如果业务场景允许,使用App Service的部署槽位功能:

  • 将应用内容部署到测试槽,验证后再交换到生产槽
  • 重新部署基础设施模板时,生产槽的部署记录和应用内容不会被影响,因为槽位状态是独立的

注意事项

  • 测试ignoreChanges配置时,先在非生产环境验证,确保重新部署Bicep后应用内容和部署记录完整保留
  • 定期检查模板中的属性,避免新增会覆盖部署状态的配置项

内容的提问来源于stack exchange,提问作者Mike-E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:24:54