使用docker进行部署时如何在liquibase中回滚

时间:2018-08-29 06:12:07

标签: liquibase

我开始将liquibase用于我们的springboot项目之一。使用Gitlab CI,我们正在创建映像并进行部署。一切正常。但是我陷入了回滚。

我已经阅读了liquibase回滚文档 https://www.liquibase.org/documentation/rollback.html

但是我可以使用cmd或maven插件执行。但就我而言,问题是所有东西都打包在映像中并部署了。他们不是我可以在其上运行这些命令的系统。那么如何执行回滚。预先感谢。

尝试:由于我的数据库位于aws中,因此我猜想从命令行运行回滚命令将不起作用。而且我正在通过从Gitlab CI构建的图像文件访问rds

1 个答案:

答案 0 :(得分:0)

尝试以下操作:

java -cp /path-to-your/spring-boot-fat.jar \ -Dloader.system=true \ -Dloader.main=liquibase.integration.commandline.Main \ org.springframework.boot.loader.PropertiesLauncher \ --changeLogFile=db/changelog/db-changelog-master.xml \ --driver=org.h2.Driver \ --username=sa \ --url="jdbc:h2:~/test;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" \ --password=sa \ updateSQL

当然可以更改数据库的属性,并在classpath上正确指定更改日志的路径。

更新:

这可以帮助您以编程方式进行操作:

void testRollback(final Connection connection) throws LiquibaseException {
    final Liquibase liquibase = new Liquibase(
            "/path-to/your/changelog.xml",
            new CompositeResourceAccessor(new ClassLoaderResourceAccessor(), new FileSystemResourceAccessor()),
            new JdbcConnection(connection));

    final String contexts = "dev,test";
    liquibase.rollback(10, contexts);
}