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

使用YAML任务交换Azure部署槽后staging槽函数缺失问题

问题根因

当前配置遗漏了Azure函数部署槽交换必需的粘滞槽设置(Deployment Slot Setting),使用的老版本交换任务缺少前置校验逻辑,最终导致交换后staging槽运行时无法加载函数代码。
核心触发逻辑:

  • Azure函数有一组和槽强绑定的配置,不能随交换动作在槽间流转,包括WEBSITE_CONTENTSHARE、WEBSITE_CONTENTAZUREFILECONNECTIONSTRING、WEBSITE_RUN_FROM_PACKAGE、FUNCTIONS_EXTENSION_VERSION这类指向槽专属存储路径、固定运行时版本的配置项。如果不将这些配置标记为「粘滞到槽、不参与交换」,交换后staging槽会拿到原生产槽的路径配置,指向的存储位置要么没有有效函数包,要么路径权限不匹配,运行时加载不到任何函数。
  • 所用的AzureAppServiceManage@0为较早版本的任务,默认不会在交换前做槽配置合法性校验,也不会自动处理函数专属的粘滞设置逻辑,容易触发配置错位。
解决方法

按以下步骤操作即可修复:

  1. 先在Azure门户配置两个槽的粘滞设置
    • 分别进入生产槽、staging槽的「配置」页面
    • 找到以下配置项,勾选「部署槽设置」选项后保存:
      • WEBSITE_CONTENTSHARE
      • WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
      • WEBSITE_RUN_FROM_PACKAGE
      • FUNCTIONS_EXTENSION_VERSION
      • 所有自定义的、不需要在槽间同步的环境变量
    • 注意两个槽的WEBSITE_CONTENTSHARE值不能重复,生产槽默认值一般为<函数应用名>,staging槽修改为<函数应用名>__staging做区分即可。
  2. 修正流水线中的交换任务配置,补充必要参数,修正后的YAML如下:
- task: AzureAppServiceManage@0
  displayName: 'swap slots'
  inputs:
    azureSubscription: ${{parameters.serviceConnection}}
    webAppName: '${{ parameters.solutionAbbreviation }}-compute-${{ parameters.environmentAbbreviation }}-${{ parameters.name }}'
    resourceGroupName: ${{parameters.solutionAbbreviation}}-compute-${{parameters.environmentAbbreviation}}
    sourceSlot: staging
    swapWithProduction: true
    PreserveVnet: true
    SlotStickyConfig: true
  1. 配置修改完成后,先将完整函数包重新部署到staging槽,再执行交换操作,两个槽即可正常加载对应函数。

补充:正常槽交换完成后,staging槽会持有交换前生产槽的代码版本,生产槽持有交换前staging槽的新版本,不会出现空槽情况。如果配置完粘滞设置后仍出现空槽,进入staging槽的部署中心,断开后重新连接部署源,触发一次staging槽全量重部署即可。

问题参考截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:15:41