如何在构建工件中包含数据库迁移脚本

How to include database migration scripts in build artifacts

根据 Martin Fowler 的出色article

Once the build finishes successfully, the CI server packages the build artifacts and publishes them. These build artifacts contain the database migration scripts, so that they can be applied to the databases in downstream environments (...)

我的问题是,对于基于 Java 的工作流程,这在实践中是如何实现的?构建工件通常是 .war、.jar 或 .ear 文件,并发布到 Nexus、Archiva 或 Artifactory 服务器。这些工件中是否可以包含迁移脚本,以便可以在不对目标环境进行任何修改的情况下执行迁移? Flyway 或 Liquibase 等工具可以用于此目的吗?

是的!我们 (Flyway) 强烈建议将您的迁移与您的应用程序打包在一起,并 运行 在启动时将它们打包。通过这种方式,您可以确保您的数据库始终包含当前版本的应用程序所需的对象(表、视图、存储过程...)。

我们使用 maven 构建工件,我们在 src/main/resources/db/migration 文件夹下有 flyway 迁移脚本。

应用程序是一个 spring 网络应用程序,在 spring 容器启动期间,它运行 Flyway migrate。如果出现问题,应用程序将永远不会启动。

这样我们就可以确保数据库状态是应用程序启动时所需要的。