数据库变更的 CI/CD 流水线
持续集成 (CI) 和持续部署/交付 (CD) 广泛应用于应用程序代码,但它们对于数据库变更同样重要。数据库是关键组件,安全地管理模式、存储过程和数据需要自动化、测试和适当的版本控制。1. 关键概念
数据库版本控制:
使用版本控制系统(例如 Git)跟踪数据库模式、对象和脚本的变更,并与应用程序代码一起进行管理。
迁移脚本:
用于增量修改数据库结构或数据的脚本,通常使用 SQL 编写或使用迁移框架(例如 Liquibase、Flyway、Alembic)。
幂等性:
迁移脚本应具有可重复性,即使多次应用也不会出错。
回滚/撤销脚本:
用于在发生故障时撤销变更的脚本,确保安全部署。
2. 数据库变更的 CI/CD 流水线阶段 A. 版本控制
将所有数据库变更(模式、种子数据、存储过程、触发器、函数)存储在代码仓库中。
像应用程序代码一样,对版本进行标记和分支管理。
优势:
变更可追溯性
开发人员之间的协作
B. 构建/验证
对迁移脚本进行自动化检查:
语法验证
SQL 脚本代码检查
确保命名规范
工具:SQLFluff、Flyway validate、Liquibase diff
C. 测试/集成
在隔离环境中将迁移应用到测试数据库。
运行自动化数据库测试:
存储过程/函数单元测试
与应用程序架构变更的集成测试
数据一致性检查
优势:
及早发现错误
确保与应用程序代码兼容
D. 部署/交付
将迁移部署到预发布或生产环境:
自动化部署:由合并到主分支触发。
手动审批:生产环境可选,以确保安全。
部署方式:
在线(零停机)迁移:新增表、列等增量变更。
离线迁移:可能需要停机的结构性变更(例如,重命名列、数据类型变更)。
E. 监控与回滚
部署后监控数据库健康状况:
查询性能
错误日志
应用程序集成
回滚策略:
反向迁移脚本
出现关键问题时从备份恢复
3. 数据库 CI/CD 管道工具
类别 工具
版本控制 Git、Bitbucket、GitLab
迁移管理 Flyway、Liquibase、Alembic、DBmaestro
CI/CD 编排 Jenkins、GitLab CI、GitHub Actions、Azure DevOps、CircleCI
测试 tSQLt(SQL Server)、utPLSQL(Oracle)、pgTAP(PostgreSQL)、自定义脚本
监控 Datadog、New Relic、Prometheus、原生数据库日志
4. 数据库 CI/CD 最佳实践
将数据库视为代码
将迁移脚本与应用程序代码一起纳入版本控制。
自动化一切
自动化测试、部署和回滚,以减少人为错误。
使用增量迁移
进行小规模、频繁的更改,而不是大规模、高风险的更改。
保持向后兼容性
确保新的架构更改不会立即破坏应用程序。
使用独立的环境
使用专用的开发、测试、预发布和生产数据库。
测试回滚
始终在非生产环境中验证撤销脚本。
记录更改
妥善记录更改日志和迁 兄弟手机清单 移脚本,以便进行审计和合规性审查。
5. 示例工作流程
开发人员编写迁移脚本(例如,添加新列)并提交到 Git。
CI 流水线验证脚本语法和命名约定。
流水线将迁移应用到测试数据库并运行自动化测试。
如果测试通过,CD 流水线将迁移部署到预发布环境。
预发布环境验证和可选审批完成后,部署到生产环境。
部署后监控确保性能和数据完整性。
如果检测到问题,则会应用回滚脚本或备份。
頁:
[1]