首页 > 解决方案 > Azure devops 在多个数据库上部署时执行 ef core (.Net core 3.0) 迁移 sql 脚本(来自项目存储库)

问题描述

我有一个API APPAzure其中构建 api 的entity framework core code first.

EF 正在与3 个不同的数据库通信

连接字符串存储在azure app configuration.

.Net Core 3.0在我的应用程序中使用

我有一个专门用于管理域和迁移的类库。

我有多个上下文,每个上下文都插入到 Azure 上的不同数据库。

我将迁移脚本和数据库初始化脚本放在 api 应用程序项目中的一个文件夹下,ReleaseScripts如下所述:

解决方案结构

如您所见,每个上下文/数据库脚本都放在一个特定的文件夹下:DA、DC、DP。并且有一个用于种子或初始化脚本的通用文件夹。

每个文件夹中的脚本都有编号(我可以指定执行顺序的方式)。

我有 2 个环境(开发和生产azure resource groups)以及存储库Developmaster.

这是构建删除触发的我的实际发布管道

流水线步骤

并遵循任务。

任务

这也是我的管道代理配置:

代理人

最后,我想在部署时执行我的存储库中文件夹中的每个脚本(如果尚未执行)ReleaseScripts

我发现这个Microsoft 链接 在谈论它,但没有详细说明。

此外,我不太明白我应该如何解决这个问题。

关于如何做到这一点的任何想法?

任何建议将不胜感激

标签: c#azureasp.net-corecontinuous-integrationazure-sql-database

解决方案


问题是您只想在尚未执行的情况下执行每个脚本。这意味着您需要以某种方式保留已在 SQL Server 上执行的内容的状态 - 这将需要迁移表或类似的东西。

因此,我建议将所有 SQL 脚本设为幂等,然后通过 SQLCMD 执行它们 - https://docs.microsoft.com/en-us/sql/ssms/scripting/sqlcmd-run-transact-sql-script-files?视图=sql-server-ver15

在 Azure Pipelines 中,您应该能够使用Azure SQL 数据库部署任务 https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/sql-azure-dacpac-deployment?view=azure-开发运维


推荐阅读