【问题标题】:Multi-Tenant DB deployments using Azure DevOps使用 Azure DevOps 的多租户数据库部署
【发布时间】:2020-06-10 01:43:13
【问题描述】:

我们的应用程序使用由特定于客户端的数据库支持的单一代码库。 我们试图实现的是在 IIS 网站上使用通常的代码推送进行代码部署,并在 Azure DevOps 上使用 SQL Dacpac 进行 Schema Only changes 的 DB 部署。

这里的问题是某些更改不会同时进入所有客户端的数据库。我们需要的是能够选择哪些是我们当前版本的目标数据库。

有时我们会发布所有更改(仅限架构),有时会发布少数几个。

一种方法是为所有数据库创建单独的发布管道并逐个发布。

有没有一种方法可以在版本本身中包含复选框,每个版本都会询问我这些更改应该转到哪个数据库?

另一种可能的解决方案是找到一种方法,在从我的主管道创建一个版本时,我可以调用 5-10 个发布管道(每个用于不同的数据库版本),并为发布提供某种复选框,我可以使用这些复选框来选择哪个此版本中要执行的操作以及要跳过的操作。

我需要针对这种情况的建议/最佳行业实践。

【问题讨论】:

    标签: sql database devops release dacpac


    【解决方案1】:

    是的,有。您可以将一个发布管道配置为每个数据库项目都有一个 SQL Server 数据库部署任务。当您使用该管道创建版本时,DevOps 通过允许您启用或禁用该特定版本的每个任务来提供灵活性。创建发布管道后,流程如下:

    • 选择您的发布管道
    • 创建版本
    • 编辑版本(不是管道)
    • 右键单击每个 SQL Server 数据库部署任务并根据需要启用或禁用
    • 保存
    • 部署

    【讨论】:

      【解决方案2】:

      您可以通过在代表部署到您的一个数据库的每个任务步骤上添加 conditionals 来做到这一点

      steps:
      - task: PowerShell@2
        condition: eq(variables['deployToDb1'], true)
        inputs:
          targetType: 'inline'
          script: |
            Write-Host "Release to DB 1"
      - task: PowerShell@2
        condition: eq(variables['deployToDb2'], true)
        inputs:
          targetType: 'inline'
          script: |
            Write-Host "Release to DB 2"
      

      变量 deployToDb1deployToDb2 是在 Edit Pipeline 页面上使用 UI 定义的,并且可以在稍后的发布运行中被覆盖

      【讨论】:

        猜你喜欢
        • 2020-10-22
        • 1970-01-01
        • 2019-10-26
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2012-09-10
        相关资源
        最近更新 更多