Entity Framework 核心迁移分开 CI/CD 管道

Entity Framework Core Migrations Separate CI/CD Pipeline

我的公司正在转向微服务,作为这种转变的一部分,devops 正在站起来 CI/CD 使用 VSTS 和 GIT 在 Azure 中构建发布管道。

当前管理迁移的模型是开发人员在 2 个单独的 git 存储库中获得 2 个项目。

项目 1 - API 服务项目 - .NET Framework / .Net Core
项目 2 - 使用迁移 API

基于 EF6 的数据库项目

这些项目具有基于存储库的完全独立的发布管道。因此,当您在 master 中创建拉取请求时,管道会构建并发布项目。

这个新架构还支持蓝绿部署和我们在多个节点上的应用程序服务运行。

我们遇到的问题是,对于此设置,我们基本上必须手动编写迁移代码,并且不能使用 EF Core 中提供的任何工具。

我读过的大多数文章和文档都显示 运行从应用程序启动迁移,但是如果您有多个应用程序服务节点,如何防止 2 个节点 运行ning迁移?

我看过的其他文章显示将迁移移动到一个单独的项目中,但该项目需要引用其中包含 dbcontext 的项目。在我公司的设置中,这是不可能的。我们也不能反其道而行之,因为将 dbcontext 移动到数据库项目会阻止我们在 api 服务项目中引用它。

有什么方法可以用 EF Core 支持这个模型吗?

在多节点应用服务上使用 EF Core 迁移实现蓝绿部署的首选方法是什么?

我会尝试声称不存在也不是因为 EF Core 不以某种方式支持它,而是因为根据我在您的问题中的理解,这听起来不可能。

您的公司希望能够进行 blue/green 部署,但实际上只能在服务层实现,而不能在数据库上实现。这个想法听起来很酷,快速回滚,几乎没有停机时间。但实际上数据库使事情复杂化了很多。

所以假设您的项目 1 运行 在机器 A 和 B(代表蓝色和绿色部署)上。 A 当前是生产环境,B 是相同的,但不提供任何 ATM 请求。它们都指向完全相同的数据库(如果不是,则不是 blue/green,它只是一个单独的环境)。当你想部署你的数据库更改时,你迁移了你的数据库,但现在机器 A 和 B 都将指向更新后的数据库。您可以继续从 A 切换到 B,但如果您的数据库迁移出现任何问题,它们可能都已停止工作。

因此,我真的不明白您通过单独的管道在单独的存储库中进行数据库迁移所取得的成就。这只会使发布的协调复杂化,因为它们显然是相互依赖的,但我看不出它对解决任何问题有何帮助。如您所述,您不能将迁移脚本的创建委托给 EF Core,至少在没有一些手动工作的情况下是这样。

很高兴听到这种设计的任何优点。