如何向同一Azure Function App添加第二个函数(避免覆盖)
解决Azure Function App部署多函数时覆盖原有函数的问题
问题根源
你当前使用的GitHub Action是将指定路径下的内容全量打包部署到Azure,会直接替换Function App上已有的所有文件。如果第二个函数没有和第一个函数放在同一个项目目录结构中,单独部署第二个函数时自然会覆盖掉第一个。
解决步骤
1. 调整项目目录结构
所有函数必须放在同一个Azure Function项目根目录下,标准结构如下:
项目根目录/ ├── 函数1文件夹/ │ ├── __init__.py │ ├── function.json │ └── 其他相关文件 ├── 函数2文件夹/ │ ├── __init__.py │ ├── function.json │ └── 其他相关文件 ├── requirements.txt # 所有函数共享的依赖文件 └── host.json # Function App全局配置文件
每个函数单独占用一个文件夹,通过各自的function.json定义触发规则等配置,根目录放置所有函数共享的依赖和全局配置。
2. 检查GitHub Action路径配置
你的当前配置里AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'已经指向项目根目录,只要项目结构符合上述要求,这个配置无需修改。如果之前你是单独部署某个函数的文件夹,需要将该参数改回项目根目录路径。
3. 可选:启用增量部署(单独部署单个函数不影响其他)
如果需要单独部署某个函数又不想覆盖现有函数,可以在Azure/functions-action步骤中添加clean: false参数,禁止部署时清空现有文件:
- name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 id: fa with: app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }} package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }} publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }} scm-do-build-during-deployment: true enable-oryx-build: true clean: false # 新增该行,保留Function App上的现有文件
⚠️ 注意:使用该参数时,要确保新部署的文件不会与现有文件冲突(比如不要重命名函数文件夹);如果需要删除旧函数,需手动在Azure门户操作,或者本地删除对应函数文件夹后再执行部署。
4. 验证部署结果
推送代码后查看GitHub Action的部署日志,确认无报错。登录Azure门户进入你的Function App,在「函数」列表中应该能看到两个函数都已正常存在。
内容的提问来源于stack exchange,提问作者FalloutATS21
相关产品推荐
相关产品推荐

