Linux Python Azure Function主机增量添加函数 避免覆盖已部署函数的方法
Python Linux Azure Functions 多团队共用主机的增量部署最简方案
核心实现思路
大家常用的/api/zipdeploy端点默认是全量清空site/wwwroot目录再解压部署包,天然会把其他团队的内容冲掉。不需要拆分多套Function应用、不需要额外挂载共享存储,只要调整部署的请求端点和打包结构,就能实现不覆盖已有内容的增量更新:
- 放弃默认全量替换的zipdeploy端点,改用Kudu文件服务的增量解压端点
/api/zip/site/wwwroot/,通过PUT方法提交部署压缩包 - 这个端点的内置逻辑是把压缩包内的文件合并写入指定的
wwwroot路径,不会删除路径下已经存在的、不在本次部署包里的文件,刚好匹配多团队共用一台主机的需求
之前操作没生效的常见原因
- 之前试Kudu的zip端点没发布成功,基本是两个常见问题:一是部署包多套了一层外层目录,比如本来应该直接在压缩包里放
func1/、func2/文件夹,结果多了一层build/output/的嵌套,导致解压后路径不对,函数运行时扫不到;二是请求路径没精准指到site/wwwroot/,内容被解压到了其他运行时不会扫描的目录 - 用FTP上去看不到已经部署的文件是Linux版Azure Functions的正常现象:Linux函数跑在临时容器里,默认FTP通道连的是容器的临时文件系统,不是运行时实际加载的持久化存储盘,所以FTP里看到空目录很正常,别拿FTP当部署渠道
落地要注意的细节
- 第一次部署的时候,把所有团队统一的
host.json、公共依赖配置放到wwwroot根目录就行,后面各团队的部署包只打自己负责的独立函数文件夹,别反复打包全局配置文件,免得把统一的配置覆盖掉 - 所有团队的函数名要全局唯一,别出现不同团队的函数文件夹重名的情况,不然会互相覆盖
- 部署完不用手动重启应用,Azure Functions自带的文件检测机制会自动扫到新的函数完成加载
内容的提问来源于stack exchange,提问作者Christian Vorhemus
相关产品推荐
相关产品推荐

