






















其中,changeSet包含不同的数据库变化,几乎涵盖了所有的数据库变化类型,具体支持的类型要看API,我这里给几个例子:
* 创建和删除表、视图、存储过程、主键、外键、索引等
* 重命名表、视图、列等
* 加入列缺省值、唯一约束、非空约束等
* 合并两个列
* 在一个表的数据的基础上创建一个字典表
除此之外,Liquibase还允许你运行自己的Sql脚本、执行Shell程序。
之所以所说”几乎涵盖“,是因为目前我发现不支持用户自定义数据和自定义函数的。由于在我新的数据库开发原则中摒弃了对他们的依赖,所以也不痛苦。
Liquibase在持续集成中的应用如果你基于Java开发,你可能会更喜欢Liquibase,如果基于Ruby On Rails开发,你可能会选择Migration 和 Rake。我基于.Net,考察过Red Gate($),Migration.Net,
Machine.Migrations,Power Tools等等,最终还是选择了Liquibase。如何整合到我的开发流程中来,我选择命令行以及基于命令行的MsBuild任务。
用命令行搞一个bat文件执行Liquibase,用户数据库部署(见我例子中的deploy.bat)。
Msbuild提供比较、部署、文档生成等等全套功能,用于开发的全过程,当然也用于CC.Net(见例子中的ci.proj)。
具体的应用包括:
* 开发人员在本地完成一个阶段的开发后,使用ci.proj中的diff target比较本地数据和基线数据,产生changelog.xml,提交到SVN(这里,XML文件中的changeSet中的Author取开发人员本地机器的用户名)
* CC.Net检测到SVN的变化,触发持续集成过程,调用ci.proj中的deploy在一个测试数据库中创建最新的数据结构,然后对实体类和访问层进行测试(开发人员在本地机器的测试亦如此)。测试成功,使用ci.proj中的doc生成文档,发布在持续集成服务器的IIS中。
* 如果是trunk项目则在测试完成后需要在SVN上打Tag,然后使用ci.proj中的publish发布数据库部署升级程序(含changelog.xml)
* 发布的数据库部署升级程序中含deploy.bat给部署人员用以部署或升级现有的产品系统数据库。
关于changelog.xml的合并:
* 每一次开发人员有新的changelog.xml提交,我会通过SVN的Merge功能将其新的changeSet合并
* 这个过程可以通过SVN自动完成,但鉴于数据库的变化影响面太大,需要谨慎审核,因此还是选择手工来做
关于
test.proj: 这是用MsBuild写的一个测试案例,测试ci.proj提供的数据库比较和升级功能。
关于ci.proj的说明:
* 对
dtproperties的特殊处理
一旦你使用过Sql Server的企业管理器操作过数据库,会自动生成这个表存一些数据库对象的属性。虽然在企业管理器中显示为系统表,但它的object_id很大,使得liquibase将其看做用户表,会影响数据库比较结果,因此在ci.proj中会检查参与比较的两个数据是否存在该表,如果不存在则创建它。
* <Target Name="CheckExec">
MsBuild使用Java命令行调用liquibase,如果执行出错,MsBuild不能得到该错误,这样将导致CC.Net的持续集成在失败时报成功。没有找到更好的办法,我将执行Java得到的输出写入exec.log文件,然后用CheckExec检查其中是否有Failed关键字。可能还有其他的关键字需要检查,如果园友发现还请告诉我。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。