部署到具有部署槽的 Azure 生产槽的正确方法是什么

What is the proper way to deploy to an Azure production slot that has deployment slots

我有一个 Azure 应用服务,是我在 2017 年 11 月创建的。该应用服务名为 ManifestAPI。

我为应用程序服务创建了一个 QA 部署槽,名为 ManifestAPI-QA,从那时起,我一直愉快地将 API 的代码更新部署到 QA 槽。我正在使用 Kudu zipdeploy API 从我的 Bamboo 部署服务器部署到 Azure QA 部署槽。没有错误,所有端点都工作正常。

现在,我们正准备将产品移至生产环境,我正在尝试部署到基础应用服务 ManifestAPI。所以我在 Bamboo 中创建了一个部署,使用与我部署到 QA 插槽完全相同的发布代码并将其部署到 ManifestAPI URL。但是,当我尝试 运行 基本应用服务中的 API 时,出现 502.5 错误。

我尝试使用相同的代码库和来自基本清单API 应用服务的发布配置文件从 VisualStudio 2017 中直接发布,认为 Bamboo 部署存在问题。但是我得到了同样的 502.5 错误。

查看 eventlog.xml 文件中 LogFiles 文件夹中的 Kudu 站点,我看到以下内容;

<Event>
    <System>
        <Provider Name="IIS AspNetCore Module"/>
        <EventID>1000</EventID>
        <Level>1</Level>
        <Task>0</Task>
        <Keywords>Keywords</Keywords>
        <TimeCreated SystemTime="2018-06-25T23:03:57Z"/>
        <EventRecordID>1583337234</EventRecordID>
        <Channel>Application</Channel>
        <Computer>RD0003FF11B70E</Computer>
        <Security/>
    </System>
    <EventData>
        <Data>Application 'MACHINE/WEBROOT/APPHOST/ManifestAPI' with physical root 'D:\home\site\wwwroot\' failed to start process with commandline 'dotnet .\ManifestAPI.dll', ErrorCode = '0x80004005 : 80008096.</Data>
    </EventData>
</Event>

检查 Google 上的错误似乎表明安装在 IIS 上的 .Net Core DLL 存在问题。

此外,由于 API 在 QA 部署插槽 IIS 实例中运行良好,我相信这意味着我的代码很好。因此,我认为 Microsoft 提供的 IIS 实例和 .NET Core 文件一定存在问题。

我比较了 ManifestApi 和 ManifestAPI-QA 实例的扩展,它们在两个实例上是相同的。

ASP.NET Core 2.1 (x86) Runtime  2.1.0-preview2-final  No
ASP.NET Core Extensions  2.1.0-preview2-final  No

我尝试从工作 QA 插槽到生产(基本应用程序服务)插槽进行交换,但遇到了相同的 502.5 错误。

我通过克隆 ManifestAPI-qa 实例创建了一个名为 ManifestAPI-Prod 的新部署槽,将我的部署包部署到该槽并设置连接字符串和应用程序设置以完全匹配我在基本应用服务应用程序设置部分。 ManifestAPI-Prod 部署槽运行良好。

因此,我在 Azure 中与 Microsoft 建立了一个支持案例,到目前为止,我已经花了 2 天多的时间与技术人员来回交流,试图解决这个问题。他们一直说这一定是我的代码中的一个问题,但这对我来说没有任何意义,因为完全相同的部署包在 QA 插槽和现在的 Prod 插槽中工作。一位技术人员甚至说我没有正确部署。但是,我在 VS2017 中使用 dotnet publish,然后压缩生成的文件目录并通过 zipdeploy API 推送到 Kudu。这对于部署槽一直很有效,我不明白我是如何错误地部署它的。

此时,我不知道如何将 API 部署到生产(基础)插槽。

我在这里错过了什么?

更新 6/27/18 通过卸载 Azure 生产槽实例中的所有扩展解决了这个问题。然后重新安装 Microsoft Core 扩展。 Extensions blade 仍然显示 ASP.NET Core Extensions 2.1.0-preview2-final 但是当我转到该实例的 Azure 控制台并键入 dotnet --info 时,它列出了以下内容;

.NET Core SDK (reflecting any global.json):
 Version:   2.1.301
 Commit:    59524873d6

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.14393
 OS Platform: Windows
 RID:         win10-x86
 Base Path:   D:\Program Files (x86)\dotnet\sdk.1.301\

Host (useful for support):
  Version: 2.1.1
  Commit:  6985b9f684

.NET Core SDKs installed:
  1.1.8 [D:\Program Files (x86)\dotnet\sdk]
  2.1.101 [D:\Program Files (x86)\dotnet\sdk]
  2.1.300 [D:\Program Files (x86)\dotnet\sdk]
  2.1.301 [D:\Program Files (x86)\dotnet\sdk]

值得注意的是,2.1.0-preview2-final 的列表不再出现在 dotnet --info

显示的文件列表中

我不知道您的应用为何失败,但我确实看到了一个危险信号:您似乎正在使用 2.1.0-preview2-final。现在 2.1 已正式发布,您应该更新您的项目以使用它。

此外,请注意预览版需要安装站点扩展,而最终版本则不需要。因此,您需要卸载预览站点扩展(您可以从 Azure 门户执行此操作)。