2017-08-29 23 views
1

我是Flyway的新手。我非常喜欢它,并且我即将把它集成到我们的Java工作区中。然而,在规划这些迁移的实际发布过程时,我需要一点“推”。据迁飞的文档我的如何在Java应用程序的连续发布过程中使用Flyway?

  • 分发的.sql文件列表或
  • 分配打包成一个JAR归档SQL和Java文件的列表选择。

我想尝试第二个选项,因为它给了我们更多的灵活性,听起来我可以简单地将迁移脚本作为资源包含在可执行文件的jar文件中。然而,由于我们在连续发布过程中经常提供数据库更改,因此我发现该jar文件最终被大量脚本文件污染。而且,在使用Ant创建jar文件时,Ant会将每个文件的名称放入清单的类路径中,这会使清单变得混乱。

考虑到这些问题,对于那些你在生产中使用迁飞路线:

什么是分布迁移脚本的推荐的方法?你把所有的人都放进一个罐子里,然后把它传递给服务器上的flyway吗?或者,每次发布时,是否使用批处理文件将所有脚本复制到服务器?谢谢你的建议。

回答

0
  1. 战项目建成使用Maven
  2. 战项目的src /主/资源/ DB /迁移具有迁移脚本。
  3. 数据库迁移脚本是构建战争时的包。
  4. 将战争作为容器启动的一部分进行部署时,将执行使用flyway的db迁移。

本地开发环境遵循上述方法,Jenkins管道持续部署Test/Stage环境,并自动运行DB Migrations。

如果连续部署管道发生故障,我们使用flyway命令行手动运行数据库迁移。

我们还可以选择运行使用命令行进行生产部署和故障排除的飞路。

0

您可以设置一个jenkins作业来自动化飞路迁移。您可以通过两种方式来完成。

  1. 通过配置的目标和选项来运行

编译迁徙路线:迁移-Dflyway.user = “XXXXX” ......(你的其他选择)...

  • 通过上安装迁飞转轮插件Jenkins
  • 我宁愿使用第一个选项来做它,因为您不必在Jenkins盒子上安装任何东西。

    +0

    我喜欢把这个任务委托给构建服务器的方法。但是,这不需要构建服务器连接到客户的服务器并直接更改客户的生产数据库(包括推出最新的应用程序代码)吗?在我的场景中,构建服务器只做构建和测试,稍后将作为单独的任务进行交付或部署。 – Wombat

    +0

    因此,我们在我们的cert和prod域中使用单独的作业来迁移数据库并进行模式更改。这项工作不同于建立和推出最新应用程序代码的正常Jenkins工作。我们将其分开,因为有时我们可能必须在将新的jar放入cert(或prod)之前运行迁移,并且有时我们必须在发布之后执行迁移,无论哪种方式的责任分离对我们来说迄今为止都工作得很好。希望这回答你的问题。 – Vydruth