DevOps流水线之数据库篇

栏目: 编程工具 · 发布时间: 7年前

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

概述:

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

方案:

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

工具:

DevOps流水线之数据库篇

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

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

https://github.com/lean-soft/SQLToolkit

DevOps流水线图:

DevOps流水线之数据库篇

流水线概述:

开发人员在编写应用逻辑的同时,编写 SQL 升级脚本,确保将应用代码以及SQL升级脚本一并迁入到配置库。

配置库变更后触发持续集成,自动编译应用,以及发布数据库升级脚本。

发布服务在测试环境数据库按编号依次顺序执行SQL升级脚本完成数据库升级,并完成应用升级部署。

测试环境经过测试后,执行QA以及Staging环境的数据库升级以及应用升级部署。

相关环境测试没有问题,相关人员对应用以及数据库升级脚本进行评审,并完成生产环境的自动化部署。

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

才能保证数据的完整性。

优点:

1. 代码与升级脚本同时迁入到配置库,保证了应用程序与数据库统一版本,避免出现应用程序与数据库无法对应版本的问题。

2. 通过数据库脚本记录可以方便的跟踪数据库变更历史。

3. 通过数据库升级脚本中的事务可以控制回滚。

4. 通过对数据对象以及数据的灵活处理保证数据的完整性。

流水线搭建:

项目结构:

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

DevOps流水线之数据库篇

脚本内容参考: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')

持续集成搭建

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

DevOps流水线之数据库篇

发布结果如下:

DevOps流水线之数据库篇

持续部署搭建

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

DevOps流水线之数据库篇

备份脚本命令如下:

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

执行结果如下:

DevOps流水线之数据库篇

数据库:

数据库自动生成ST_DatabaseVersion表,用来存储当前应用程序的数据库版本。

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

DevOps流水线之数据库篇

总结:

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

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Practical JavaScript, DOM Scripting and Ajax Projects

Practical JavaScript, DOM Scripting and Ajax Projects

Frank Zammetti / Apress / April 16, 2007 / $44.99

http://www.amazon.com/exec/obidos/tg/detail/-/1590598164/ Book Description Practical JavaScript, DOM, and Ajax Projects is ideal for web developers already experienced in JavaScript who want to ......一起来看看 《Practical JavaScript, DOM Scripting and Ajax Projects》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试