从 Visual Studio 部署 Azure Function Slot 部署生产

Deploying Azure Function Slot from Visual Studio deploys Production

简述: 如何在 Visual Studio 中创建部署部署槽与生产槽的发布配置文件?

长: 当你接到一个 Sev1 电话说生产中断的那一刻,你知道在你刚刚启动集成部署之前的几分钟部署槽。是的,这就是发生在我身上的事情,我无法解释。

因此,我们有一个用于名为 "Int" 的 Azure Function 应用程序的部署槽。在创建发布配置文件时,我只是在 Visual Studio 中使用了 "Create new profile" 向导并选择了 "Select Existing" Azure App Service,然后在 "Int" Deployment Slot 中钻取。看起来很简单。这样做会导致部署 Int AND Production。这当然是出乎意料的,而且显然是灾难性的。

在 Portal 中进行一些挖掘后,我发现在 Azure Function 应用程序的 "Overview" 部分中有一个 "Download publish profile" 按钮。单击它用于生产和 INT 会产生两个具有不同用户、destinationAppUrls 等的单独文件。两者之间唯一相同的是 FTP publishUrl,但我假设服务器会路由到适当的基于传入的凭据的 root。

尽管我有两个独特的发布配置文件,一个用于 prod,一个用于 int,但部署它们中的任何一个都会更新生产和我们的部署槽。

以下是我尝试自行修复但无济于事的问题列表:

  1. 已从 Visual Studio 中删除两个发布配置文件并通过向导重新创建它们。
  2. 已从 Visual Studio 中删除两个发布配置文件并通过从门户下载的配置文件重新创建它们。
  3. 删除了 INT 发布配置文件,在门户中为我们的 INT 部署槽创建了一个新的 FTP 用户,更新了下载的 INT 配置文件,然后将其导入 Visual Studio。 <== 老实说,我认为这很愚蠢,因为我认为 VS 没有使用 FTP 进行部署。不过我可能是错的。
  4. 确保 AutoSwap 已关闭。
  5. 使用 FTP 客户端使用发布凭据手动登录。事实证明,即使 Production 和 Int 在同一位置有不同的 "FTP Deployment Users" 登录。 (这最终似乎是问题所在)
  6. 单击 "Reset publish profile" 部署槽并重新下载配置文件。

除了失去我什至没有失去的自动交换功能之外,我想解决这个问题的一种方法是创建一个完全独立的应用程序,从而迫使它正常工作。不过,我真的想尽可能避免这种情况。

在此先感谢您的帮助。

这不应该发生,但如果我不得不猜测,您必须在两个应用程序中定义相同的 WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGWEBSITE_CONTENTSHARE 值。前者是您的应用程序内容将被保存的存储帐户,后者是该存储帐户中的共享名称。两者共享相同的 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING 很好,但如果您也共享相同的 WEBSITE_CONTENTSHARE,那么您最终会遇到您所看到的奇怪行为。

通常当您通过工具创建函数应用程序时,它应该为每个应用程序创建一个具有随机名称的新共享。如果您使用 ARM 模板或其他一些方法进行部署并将它们设置为相同,您将 运行 进入该行为。