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

Bicep增量部署Function App基础设施时清空代码问题求助

问题与解决方案:Azure Function App基础设施重部署清空代码问题

问题场景

  • 仓库包含Function App业务代码与定义基础设施的main.bicep文件
  • 配置两条流水线:
    • 基础设施流水线:Bicep文件变更时触发,以增量模式部署三类资源:Microsoft.Web/serverfarms(托管计划)、Microsoft.Insights/components(应用洞察)、Microsoft.Web/sites(Function App)
    • 代码流水线:Function App项目代码提交时触发,完成构建、发布并部署至Dev环境
  • 异常现象:基础设施流水线重新运行(如为Function App添加子网绑定等配置变更)时,Function App内已发布的代码会被清空、函数消失,必须重新执行代码流水线才能恢复;Bicep的what-if结果显示仅会修改Function App的部分属性,但实际代码丢失。

解决方案

问题根源在于:Bicep部署Function App时,若未明确保留siteConfig.appSettings中的WEBSITE_RUN_FROM_PACKAGE配置,或部署时覆盖了相关配置,会导致函数应用的部署方式被重置,进而清空已部署的代码。

具体解决步骤:

  1. 在main.bicep的Function App资源定义中,显式保留WEBSITE_RUN_FROM_PACKAGE配置项。如果代码流水线采用ZIP包部署方式,该配置值通常为包的存储URL,或设置为1(表示从本地包运行,具体取决于你的部署模式)。
  2. 确保Bicep中定义的appSettings采用增量更新逻辑,避免覆盖所有现有配置。可使用union函数合并原有配置与新增配置,示例代码:
resource functionApp 'Microsoft.Web/sites@2022-09-01' = {
  name: functionAppName
  location: location
  properties: {
    serverFarmId: serverFarm.id
    siteConfig: {
      appSettings: union(
        // 拉取现有应用配置,保留WEBSITE_RUN_FROM_PACKAGE等关键项
        list(resourceId('Microsoft.Web/sites', functionAppName), '2022-09-01').properties.siteConfig.appSettings,
        // 新增或需要修改的配置项
        [
          {
            name: 'WEBSITE_VNET_ROUTE_ALL'
            value: '1'
          }
          // 其他需添加的配置
        ]
      )
    }
    // 其他Function App属性配置
  }
}
  1. 若无需通过Bicep管理所有应用设置,可直接从main.bicep中移除appSettings的定义,仅通过代码流水线或Azure门户管理应用配置,这样基础设施部署时不会触及应用设置相关内容,避免影响代码部署状态。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:30:19