利用liquibase自动化数据库变更、持续集成

1,271 阅读2分钟

目前现状,数据库是与应用程序完全脱离的单独实体

  1. 手工变更数据库(环境变多时,易出错)
  2. 使用低效的手工比对方法管理数据库版本之间的变更(耗时长、易出错)
  3. 不能与团队的其他成员分享数据库变更
  4. 代码与DDL或DML不同时提交更新,会出现不一致的情况

实现形式

以XML存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet)。 在数据库中保存数据库修改历史(DatabaseChangeHistory),在数据库升级时自动跳过已应用的变化

开始使用 LiquiBase需要以下步骤

  1. 创建一个数据库变更日志(change log)文件 liquibase-data.xml liquibase-table.xml liquibase-view.xml
  2. 在变更日志文件内部创建一个变更集(change set)
<changeSet id="2018100801" author="wangshuo">
        <sql>
            update t_system_dict a set  a.can_update = '0',a.can_del = '0' where a.groupcode = 'ZD_SKFS' and a.dictcode = '4';
        </sql>
        <comment>t_system_dict网络教学不允许删除和修改</comment>
    </changeSet>
  1. 提交代码时同步提交变更集
  2. 通过Jenkins更新时运行变更集
  3. 检验数据库中的变更
  4. 验证程序功能的正确性

changeSet维护说明

  1. 选择脚本放置在对应XML文件中
  2. ID命名规则:日期+两位数序号
  3. 注明作者
  4. context设置需要更新或者不更新到指定环境 注:不需要特殊指定时,忽略context即可
  5. 中一次可以维护多个sql
  6. comment写明对应实现功能、脚本实现目的

样例

<changeSet id="2018100801" author="wangshuo" context="!jwgly and !beta and !test"/context="jwgly,beta">
    <sql>
        update t_system_dict a set  a.can_update = '0',a.can_del = '0' where a.groupcode = 'ZD_SKFS' and a.dictcode = '4';
    </sql>
    <comment>t_system_dict网络教学不允许删除和修改</comment>
</changeSet>