You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Azure CICD使用DbUp库实现SQL Server数据库变更部署

基于Azure CI/CD + DbUp 部署SQL Server变更实现方案

1. 本地环境基础配置

  • 创建.NET控制台项目(支持.NET Framework/.NET Core/.NET 5+,推荐使用LTS版本)
  • 通过NuGet安装核心依赖包:DbUp.SqlServer,需要自定义日志可以额外安装DbUp.Serilog或者直接使用内置控制台日志
  • 项目根目录新建Scripts文件夹,所有SQL变更脚本统一存储在此处,脚本命名必须遵循带序号的规则,例如Script0001_CreateUserTable.sql、Script0002_AddUserEmailColumn.sql,DbUp会按照文件名序号从小到大执行,避免执行顺序混乱
  • 所有脚本建议设置为「嵌入式资源」:右键脚本文件→属性→生成操作选择「嵌入式资源」,打包时脚本会被嵌入到可执行文件中,避免部署时文件丢失
  • 编写主程序核心执行逻辑,连接字符串从流水线变量传入无需硬编码,示例代码如下:
using System;
using DbUp;

namespace DbUpDeployment
{
    class Program
    {
        static int Main(string[] args)
        {
            var connectionString = args[0];
            
            var upgrader = DeployChanges.To
                .SqlDatabase(connectionString)
                .WithScriptsEmbeddedInAssembly(typeof(Program).Assembly)
                .LogToConsole()
                .Build();

            var result = upgrader.PerformUpgrade();

            if (!result.Successful)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(result.Error);
                Console.ResetColor();
                return -1;
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("数据库变更执行成功");
            Console.ResetColor();
            return 0;
        }
    }
}
  • 本地验证:传入测试库连接字符串运行控制台程序,确认脚本执行正常,DbUp会自动在目标库生成SchemaVersions表,记录已经执行过的脚本,重复运行不会重复执行已成功的脚本

2. Azure DevOps CI流水线配置

CI阶段负责将DbUp项目打包为可执行制品,供CD阶段调用:

  • 新建Azure DevOps流水线,关联代码仓库
  • 添加.NET任务:执行dotnet build,指定DbUp项目路径,配置为Release模式
  • 添加.NET任务:执行dotnet publish,参数配置为--configuration Release --output $(Build.ArtifactStagingDirectory)/dbup
  • 添加发布构建制品任务:将$(Build.ArtifactStagingDirectory)/dbup下的内容发布为流水线制品,命名为DbUpPackage

3. Azure DevOps CD流水线配置

CD阶段负责将制品部署到对应环境的SQL Server实例:

  • 新建发布流水线,关联CI阶段产出的DbUpPackage制品
  • 配置变量组,为不同环境(开发/测试/生产)设置对应的SQL Server连接字符串,注意连接字符串要勾选「保密变量」,避免明文泄露
  • 添加「命令行」任务,运行DbUp可执行文件,传入对应环境的连接字符串作为参数:
    • Windows环境部署:执行DbUpDeployment.exe $(ProductionDbConnectionString)
    • 跨平台部署:执行dotnet DbUpDeployment.dll $(ProductionDbConnectionString)
  • 可选配置:生产环境添加部署前审批环节,需要负责人审批后再执行部署,避免误操作
  • 可选配置:添加部署后验证任务,执行简单SQL查询验证变更是否符合预期

4. 落地最佳实践

  • 所有SQL脚本必须是幂等的,例如创建表前先判断IF NOT EXISTS,避免脚本重复执行报错
  • 不要修改已经提交过的历史脚本,如果需要调整逻辑,新增更高序号的脚本执行修正逻辑
  • 不同环境的流水线变量严格隔离,生产环境连接字符串仅开放给少数运维人员修改
  • 每次部署前可以调用DbUp的CreatePreviewReportAPI生成本次待执行脚本列表,提前预览变更内容

内容的提问来源于stack exchange,提问作者AzureDevOpsBeginner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:15:03