【问题标题】:Azure DevOps - Multitenant database deploymentAzure DevOps - 多租户数据库部署
【发布时间】:2020-10-22 00:37:12
【问题描述】:
我们有一个包含一个代码和多租户数据库的 Web 应用程序,我们正在使用 Azure Devops CI/CD 进行代码部署。我们能够完美地将代码发布到数据库,但是我们希望将其部署到多个数据库而不需要多个发布管道(租户数量是动态的,其中 100 多个)。
我能够将代码部署到一个数据库,然后使用 sqlpackage.exe 和 dacpac 文件在目标服务器的命令行中发布相互重新部署。但我只想在 Azure devops 中这样做,但是在命令行任务中的代理机器上没有 sqlpackage.exe。
这里有人用多租户数据库方法处理类似问题吗?我对使用 Azure 发布管道的任何解决方案持开放态度。
【问题讨论】:
标签:
azure
devops
release
multi-tenant
sqlpackage
【解决方案1】:
我能够通过在部署组上运行 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
}