【问题标题】:What is the proper way to deploy to an Azure production slot that has deployment slots部署到具有部署槽的 Azure 生产槽的正确方法是什么
【发布时间】:2018-12-05 05:19:56
【问题描述】:

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

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

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

我尝试使用相同的代码库和来自基本 ManifestAPI 应用服务的发布配置文件从 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 实例中运行良好,我相信这意味着我的代码很好。所以,我认为微软提供的 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-Prod 的新部署槽,通过克隆 ManifestAPI-qa 实例,将我的部署包部署到该槽并设置连接字符串和应用程序设置以完全匹配我在基本应用程序服务应用程序设置中的设置部分。 ManifestAPI-Prod 部署槽运行良好。

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

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

我在这里错过了什么?

2018 年 6 月 27 日更新 这已通过卸载 Azure 生产槽实例中的所有扩展来解决。然后重新安装 Microsoft Core 扩展。 Extensions 刀片仍然显示 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\2.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 显示的文件列表中

【问题讨论】:

  • 您的新插槽与现有插槽声明的应用设置变量是否相同?
  • 是的。 ManifestApi-prod 具有与我试图在基本 ManifestApi 应用服务中进行的相同插槽特定设置。

标签: azure asp.net-core azure-web-app-service azure-deployment azure-deployment-slots


【解决方案1】:

我不知道您的应用程序为什么会失败,但我确实看到了一个危险信号:您似乎在使用2.1.0-preview2-final。现在 2.1 是 GA,您应该更新您的项目以使用它。

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

【讨论】:

  • 谢谢大卫。我的项目已更新到 2.1。问题是 Azure 中 IIS 生产实例中的扩展。我删除了所有扩展,然后又添加了 Microsoft 核心扩展。从 Azure 控制台执行 dotnet --info 显示它现在是正确的版本,即使在 Azure Extensions 页面中,它仍然显示 2.1.0-preview2-final
  • 奇怪,如果你卸载了扩展,它不应该在扩展页面中说任何关于 preview2 的内容。也许 Portal 只需要刷新一下?
  • 刷新了几次。它仍然在扩展页面上显示版本是 2.1.0-preview2-final。
  • 如果你点击它,你能卸载它吗?另外,尝试转到 Kudu 控制台并查看D:\home\SiteExtensions。如果已卸载,则该扩展程序根本不应该有文件夹。
  • 是的,我可以卸载它。是的,当我卸载它时,它不再位于 D:\Home\SiteExtensions 文件夹中。当我再次安装它时,它在 D:\Home\SiteExtensions 文件夹中显示为“Microsoft.AspNetCore.AzureAppServices.SiteExtension”文件夹在该文件夹内,它有“Microsoft.AspNetCore.AzureAppServices.SiteExtension.2.1.0 -preview2-final.nupkg”。但是,我的生产站点现在可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
相关资源
最近更新 更多