我正在使用ASP.NET核心&禁用多租户的ASP.NET Boilerplate的角度启动模板:1个具有单个租户的数据库(默认值(。
我还使用TeamCity构建/测试/发布启动模板中可用的项目,因此我最终获得了3个NuGet包,这些包将被推送到OctopusDeploy:
- API(主机项目,ASP.NET核心Web应用程序(
- Migrator(控制台应用程序,能够迁移数据库(
- UI(Angular App(
我想使用2个应用程序服务(主机和UI(和1个Azure SQL数据库(主机(,通过Octopus deploy(自托管,v2018.9.0(以以下方式将此设置部署到Azure:
- 使UI和API应用程序脱机,在更新项目时显示友好的维护消息
- 使用Migrator软件包迁移数据库
- 部署API应用程序包
- 部署UI应用程序包
- 将API应用程序联机,也许还需要一些测试来检查它是否正常工作
- 将UI应用程序联机
如果这一切都在prem上,我就没有问题了。这是我无法理解的Azure部分,因为我不知道如何通过Octopus Deploy:在Azure上做这些事情
- 将Azure应用程序服务脱机/联机(使用App_offline.htm文件(
- 将Migrator包部署到特殊文件夹中的API Azure应用程序服务(这样我就不会覆盖API部署(,并运行Migrator:dotnet[Migrator.dll]-q
我尝试使用Octopus Deploy"部署Azure Web应用程序",但此步骤不允许我同时部署migrator包并在部署API包之前运行它。还是这样?我不知道怎么做。
我尝试使用"运行Azure PowerShell脚本",但它在Octopus Deploy服务器上执行,而不是在Azure应用程序服务环境上执行,对吗?
也许还有其他更好的方法将此设置部署到Azure?
您可以使用应用程序服务插槽来交换逻辑应用程序的输入/输出版本。当你交换时,会有一个预热,不会损失流量。
所以基本上部署到备份插槽,然后用备份插槽交换生产。
对于数据库,我认为你的策略是无效的。你所做的一些假设不会让你的生活变得轻松。我会考虑在没有中断更改的情况下单独处理数据库部署,但这是我的观点。
我不熟悉章鱼或TeamCity,所以我不会详细介绍这些。