Liquibase - 不同版本的文件

时间:2016-05-20 19:34:58

标签: liquibase rollback devops changeset

我正在使用GIT,Bamboo,Ansible和Liquibase编排自动交付流程。

我在尝试使用Liquibase回滚功能时遇到了一些问题。基本上我有两个不同的地方,比如一个"升级"文件夹和"回滚"夹。即使文件相同,回滚也不起作用。表示:

+ deployment_folder
    + update
        - changeset-master.xml
        - changeset-1.0.0.xml
        - changeset-1.0.1.xml
    + rollback
        - changeset-master.xml
        - changeset-1.0.0.xml
        - changeset-1.0.1.xml

文件内容完全相同。

运行liquibase更新和标记很好:

$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml update
$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml tag 1.0.0
$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml update
$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml tag 1.0.1

但是,当尝试使用 rollback 文件夹中的更改集主服务器从1.0.1回滚到1.0.0时,它会显示" Liquibase Rollback Successful"但是这些变化没有回滚。 rollbackSQL命令也不显示除DATABASECHANGELOGLOCK更新之外的任何相关SQL语句。

$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=rollback/changeset-master.xml rollback 1.0.0

看起来文件必须完全相同(对于我认为的校验和),在我的情况下这是一个show blocker,我必须不断从我的源代码控制系统中提取版本,所以文件永远不会是&# 34;相同",尽管它们具有相同的内容。有没有办法在Liquibase中禁用此验证?目前我正在使用Liquibase 3.4.2。

1 个答案:

答案 0 :(得分:0)

Liquibase回滚不能以这种方式工作,您需要在< rollback>中指定回滚指令。脚本的一部分并使用rollback命令执行它:http://www.liquibase.org/documentation/rollback.html

UPD:Liquibase使用基于变更集文件名的id,更改id和作者ID来识别更改。如果您从文件f1.xml应用<change id="1" author="dbf">...</change>,那么'virtual'id是<f1.xml, 1, dbf>。当您使用相同的内容运行f2.xml进行回滚时,它计算的id为<f2.xml, 1, dbf>,因此它与第一个id不匹配,并且不会回滚任何内容。