部署到Azure App Service时迁移数据库

时间:2018-11-14 13:28:17

标签: azure aspnetboilerplate octopus-deploy

我正在使用ASP.NET Core & Angular中的ASP.NET Boilerplate启动模板,并且禁用了多租户:1个数据库,一个租户(默认)。

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

  1. API(宿主项目,ASP.NET Core Web应用程序)
  2. 迁移器(控制台应用程序,能够迁移数据库)
  3. UI(角度应用)

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

  1. 使UI和API应用程序脱机,在更新项目时显示友好的维护消息。
  2. 使用Migrator软件包迁移数据库
  3. 部署API应用程序包
  4. 部署UI应用程序包
  5. 将API应用程序置于在线状态,也许还要进行一些测试以检查其是否正常运行
  6. 在线放置UI应用程序。

如果所有这些都是本地的,我将没有任何问题。我不知道这是Azure的一部分,因为我不知道如何通过Octopus Deploy在Azure上执行这些操作:

  1. 将Azure App Service离线/在线(使用app_offline.htm文件)
  2. 将Migrator程序包部署到特殊文件夹中的API Azure应用服务中(这样我就不会覆盖API部署)并运行迁移器: dotnet [migrator.dll] -q < / li>

我尝试使用Octopus Deploy“部署Azure Web应用程序”,但是此步骤不会让我也部署migrator程序包并在部署API程序包之前运行它。还是呢?我不知道。

我尝试使用“运行Azure PowerShell脚本”,但这是在Octopus Deploy服务器上执行的,而不是在Azure App Service环境上执行的吗?

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

1 个答案:

答案 0 :(得分:0)

您可以使用App服务插槽来换入/换出逻辑应用程序的版本。交换时,会发生预热,并且不会丢失流量。

因此基本上将其部署到备用插槽,然后将生产与备用插槽交换。

对于数据库,我认为您的策略无效。您要做出一些假设,但这并不会使您的生活变得轻松。我会考虑单独处理数据库部署而没有重大更改,但这是我的看法。

我不熟悉Octopus或TeamCity,因此我不会详细介绍这些内容。