微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DevOps流水线之数据库篇

概述:

部分企业在实施DevOps过程中,发现数据库升级成为企业DevOps流水线上的核心瓶颈,应用程序发布频率越来越快,但是数据库依然采用手工更新的方式,导致数据库升级效率低下、风险较大。所以建立一套完整的应用+数据库的DevOps流水线是至关重要的。接下来小编将带大家手把手搭建一套基于Team Foundation Server的数据库CI、CD流水线。

方案:

基于数据库升级\迁移脚本:采用像编写应用代码一样的方式去编写数据库升级脚本,对脚本文件进行顺序编号并迁入代码库,在持续发布阶段按照编号依次顺序执行数据库升级脚本。完成数据库升级\变更动作。

工具:

可以使用Flyway,Evolve, Liquebase等工具完成数据库脚本的升级\迁移。

为了灵活应对各种场景,平台、语言,以及方便大家学习,小编开发了一个简单的跨平台小工具sqlToolkit来完成数据库脚本的顺序执行, 并开源到Github:
https://github.com/lean-soft/SQLToolkit

DevOps流水线图:

流水线概述:

注意:这里的数据脚本评审需要针对数据库上下文进行评审。而不是仅仅评估脚本,这样
才能保证数据的完整性。

优点:

1. 代码升级脚本同时迁入到配置库,保证了应用程序与数据库统一版本,避免出现应用程序与数据库无法对应版本的问题。
2. 通过数据库脚本记录可以方便的跟踪数据库变更历史。
3. 通过数据库升级脚本中的事务可以控制回滚。
4. 通过对数据对象以及数据的灵活处理保证数据的完整性。

流水线搭建:

项目结构:

首先需要在应用目录下创建一个文件夹,用来存放对应的数据库升级脚本。 并按照顺序编号存储对应的脚本文件,如下图所示:

脚本内容参考:01-****.sql

Use devopslabs

CREATE TABLE [dbo].[Configuration]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[Description] [nvarchar](MAX) NULL,
[Key] [nvarchar](MAX) NULL,
[Value] [nvarchar](MAX) NULL,
[displayName] [nvarchar](MAX) NULL
)
ALTER TABLE [dbo].[Configuration] ADD CONSTRAINT PK_Configuration 
PRIMARY KEY ([Id])

脚本内容参考:02-****.sql

Use devopslabs
Insert into Configuration(displayName,[Key],Value,[Description])Values
(N'站点名称','GeneralSetttings_SiteName','','SiteName')

持续集成搭建

本编只介绍数据库升级相关步骤,不介绍应用程序相关步骤,如果需要了解应用程序相关步骤请参考小编上一片文章
使用TFS玩转Docker自动化部署

在持续集成中,将sql升级脚本文件夹发布到Build Artifacts,供持续部署使用,如下图所示:

发布结果如下:

持续部署搭建

在持续部署步骤中,通过sqlToolkit工具完成数据库备份以及升级

备份脚本命令如下:

sqlToolkit Backup -s $(DATABASE_SERVER) -n $(DATABASE_NAME) -u 
$(DATABASE_USERNAME) -p $(DATABASE_PASSWORD) 
-path /home/sqlbackup/database.bak

升级脚本命令如下:

sqlToolkit RunScripts -s $(DATABASE_SERVER) -n $(DATABASE_NAME) 
-u $(DATABASE_USERNAME) -p $(DATABASE_PASSWORD) 
-path ~/LabsUpgrade/sqlScripts_Up

执行结果如下:

数据库

数据库自动生成ST_DatabaseVersion表,用来存储当前应用程序的数据库版本。
包括数据库脚本名称、执行结果、执行时间等。 这样下次升级时,工具会判断当前数据库版本,并从当前数据库版本的基础上顺序执行“未执行的数据库脚本” 。即便是环境版本不一致依然可以完成数据库升级动作。

总结:

通过搭建数据库的CI、CD可以消除应用流水线的核心瓶颈,让应用程序发布与数据库发布保持一致。减少了DBA手工操作带来的效率低下,人为错误,安全风险等问题。让DBA专注于更有价值的工作。结合基于功能分支的开发方式,可以方便的跟踪数据库变更对应的功能

由于数据是公司的核心价值,在数据库升级过程中一定要确保数据得到有效的备份,在出现问题时可以顺利回滚,已确保数据的完整性,所以有效的备份以及回滚脚本至关重要。

最后sqlToolkit已经开源到github,有兴趣的小伙伴可以关注下:
https://github.com/leansoftX/SQLToolkit.git

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐