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

时间:2018-06-26 13:06:18

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

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

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

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

我尝试使用相同的代码库和来自基本ManifestAPI App Service的发布配置文件从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插槽从工作的QA插槽切换到Production(基本App Service)插槽,并遇到相同的502.5错误。

我通过克隆ManifestAPI-qa实例创建了一个名为ManifestAPI-Prod的新部署插槽,将我的部署程序包部署到了该插槽,并设置了连接字符串和应用程序设置,使其与我在基本应用程序服务“应用程序设置”中的设置完全匹配部分。 ManifestAPI-Prod部署插槽可以正常工作。

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

这时,我对如何将API部署到生产(基本)插槽不知所措。

我在这里想念什么?

UPDATE 6/27/18 通过卸载Azure生产插槽实例中的所有扩展来解决此问题。然后重新安装Microsoft Core扩展。扩展刀片仍然显示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显示的文件列表中

1 个答案:

答案 0 :(得分:1)

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

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