部署到Azure应用程序服务时迁移数据库



我正在使用ASP.NET核心&禁用多租户的ASP.NET Boilerplate的角度启动模板:1个具有单个租户的数据库(默认值(。

我还使用TeamCity构建/测试/发布启动模板中可用的项目,因此我最终获得了3个NuGet包,这些包将被推送到OctopusDeploy:

  1. API(主机项目,ASP.NET核心Web应用程序(
  2. Migrator(控制台应用程序,能够迁移数据库(
  3. UI(Angular App(

我想使用2个应用程序服务(主机和UI(和1个Azure SQL数据库(主机(,通过Octopus deploy(自托管,v2018.9.0(以以下方式将此设置部署到Azure:

  1. 使UI和API应用程序脱机,在更新项目时显示友好的维护消息
  2. 使用Migrator软件包迁移数据库
  3. 部署API应用程序包
  4. 部署UI应用程序包
  5. 将API应用程序联机,也许还需要一些测试来检查它是否正常工作
  6. 将UI应用程序联机

如果这一切都在prem上,我就没有问题了。这是我无法理解的Azure部分,因为我不知道如何通过Octopus Deploy:在Azure上做这些事情

  1. 将Azure应用程序服务脱机/联机(使用App_offline.htm文件(
  2. 将Migrator包部署到特殊文件夹中的API Azure应用程序服务(这样我就不会覆盖API部署(,并运行Migrator:dotnet[Migrator.dll]-q

我尝试使用Octopus Deploy"部署Azure Web应用程序",但此步骤不允许我同时部署migrator包并在部署API包之前运行它。还是这样?我不知道怎么做。

我尝试使用"运行Azure PowerShell脚本",但它在Octopus Deploy服务器上执行,而不是在Azure应用程序服务环境上执行,对吗?

也许还有其他更好的方法将此设置部署到Azure?

您可以使用应用程序服务插槽来交换逻辑应用程序的输入/输出版本。当你交换时,会有一个预热,不会损失流量。

所以基本上部署到备份插槽,然后用备份插槽交换生产。

对于数据库,我认为你的策略是无效的。你所做的一些假设不会让你的生活变得轻松。我会考虑在没有中断更改的情况下单独处理数据库部署,但这是我的观点。

我不熟悉章鱼或TeamCity,所以我不会详细介绍这些。

最新更新