Azure DevOps部署Azure Function多zip包时如何不覆盖wwwroot内容
支持不清理目标目录的增量部署实现方式
- 首先调整Azure Function的应用配置:新增配置项
SCM_DO_NOT_DELETE_OLD_FILES_ON_DEPLOYMENT,值设置为1,关闭SCM站点部署时默认删除旧文件的逻辑 - 关闭Azure DevOps部署任务的清理逻辑:如果用可视化界面配置,取消勾选删除目标位置的其他文件选项;如果用YAML配置,给部署任务添加参数
removeAdditionalFiles: false - 确认Function应用未开启
WEBSITE_RUN_FROM_PACKAGE配置,该配置会将wwwroot目录设为只读的包挂载模式,无法支持增量写入,如有该配置可直接删除。
注意:该方案存在两个明显弊端:一是部署不会自动清理已废弃的旧文件,需要手动处理残留;二是如果三个构建产物存在同路径重名文件,后部署的包会直接覆盖先部署的文件,需要提前做好路径冲突校验。
更推荐的生产级解决方案
增量部署只是临时规避问题,长期来看更建议从架构层面优化,彻底解决单包体积超限问题:
- 拆分函数实例:按照功能域将函数拆分为多个独立的Azure Function应用,每个应用仅部署对应模块的代码包,从根源规避单包体积上限,同时可实现不同功能的独立扩缩容、独立发布迭代
- 自定义容器部署:改用Azure Function的容器部署模式,将所有代码、依赖打包为容器镜像推送到Azure容器镜像服务,直接部署镜像即可,完全不受2048MB zip包硬上限限制,也无需拆分多条构建流水线
- 非代码资源外置:如果部署包体积过大是因为包含大量静态资源、AI模型、数据文件等非可执行代码内容,可将这部分文件存储到Azure Blob存储中,函数运行时直接访问Blob读取资源,无需打包到部署包内,可大幅压缩部署包体积
内容的提问来源于stack exchange,提问作者cyber-guard
相关产品推荐
相关产品推荐

