Azure DevOps - 多租户数据库部署

Azure DevOps - Multitenant database deployment

我们的 Web 应用程序只有一个代码和多租户数据库,我们正在使用 Azure Devops CI/CD 进行代码部署。我们能够完美地将代码发布到数据库,但是我们希望将它部署到多个数据库而无需多个发布管道(租户数量是动态的,其中有 100 多个)。

我能够将代码部署到一个数据库,然后使用 sqlpackage.exe 和 dacpac 文件在目标服务器上的命令行中发布来相互重新部署。但是我只想在 Azure devops 中这样做,但是在命令行任务中代理机器上没有 sqlpackage.exe。

有人在用多租户数据库方法处理类似的问题吗?我对使用 Azure 发布管道的任何解决方案持开放态度。

我能够通过 运行 Inline Powershell 和 SqlPackage.exe 在部署组上解决这个问题。您只需要有一个“模板数据库”,从中获取 dacpac 或 bacpac 文件,然后将其发布到所有其他数据库。

参考示例:

ForEach ($a in (Get-Content "E:\DatabaseSync\databaselist.txt"))
{
  SqlPackage.exe /a:Publish /sf:"E:\DatabaseSync\TemplateDB.dacpac" `
/tsn:localhost /tu:username /tp:password /tdn:$a `
/p:TreatVerificationErrorsAsWarnings=False /p:BlockOnPossibleDataLoss=True `
/p:AllowDropBlockingAssemblies=True /p:DropObjectsNotInSource=True `
/p:DropPermissionsNotInSource=False /p:IgnorePermissions=True `
/p:IgnoreRoleMembership=True /p:IgnoreUserSettingsObjects=True `
/p:DoNotDropObjectTypes=Users /p:ExcludeObjectTypes=Users
}