Azure Functions:部署到暂存槽重新启动生产槽

时间:2021-02-12 04:39:15

标签: azure azure-functions azure-deployment-slots

我们在消费计划中有一个 Azure Function v3 实例,其中包括一个暂存槽,以减少部署期间的停机时间。

我们的部署流程是:

  • 将代码部署到暂存槽
  • 启动暂存槽
  • 将暂存槽与生产槽交换
  • 停止暂存槽

我们正在使用 Azure Pipelines 将代码 .NET Core 3.1 部署到暂存槽;这是此步骤的 YAML 定义:

- task: AzureFunctionApp@1
  displayName: 'Deploy to Staging Slot'
  inputs:
    azureSubscription: '****'
    appType: functionApp
    appName: '****'
    package: '$(System.ArtifactsDirectory)/Build.zip'
    deployToSlotOrASE: true
    slotName: 'staging'
    resourceGroupName: '****'

我已经禁用了这一步之后的所有步骤,只运行了这一步。在 Azure Pipelines 中完成该步骤后,主应用程序(即生产槽)将重新启动,我开始收到 503 Service Unavailable 大约 5 秒,然后冷启动。

我不明白的是如何将代码部署到暂存槽而不交换会导致生产槽重启。

我已经确定禁用了自动交换,所以情况并非如此。

如何解释和修复?我们正在尝试完全删除 503 并实现零停机部署。

更新:我已经尝试将 WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG 添加到暂存和生产槽。没有任何区别。

1 个答案:

答案 0 :(得分:0)

也许在您部署时,某些非插槽特定的应用设置可能会触发某些更改,而这些更改特定于非插槽应用设置。这些 app setting 可能会触发 production slot 的重启。

提案:

您可能需要检查您的应用设置,如果部署期间更改的应用设置未触发Production Slot的重启,您可能需要检查日志以获取更多详细信息。