【问题标题】:Liquibase: tracking changelogsLiquibase:跟踪变更日志
【发布时间】:2020-07-27 05:32:06
【问题描述】:

项目

我们有大约 50 名开发人员和 DevOps 员工,运行大约 30 个 Oracle 12c EE 实例。我们在 2018 年推出了 Liquibase。

我们使用 Liquibase Maven 插件 3.8.8 版,变更日志存储在众多 Maven 项目中,这些都以通常的trunk/tag/branch 结构提交给颠覆。

目标

我们希望通过与各自环境匹配的发布版本来简化新数据库实例的配置。一个典型的用例是在集成测试环境中设置一个新的数据库。

可以从一个空的数据库架构开始,并将变更日志应用到某个版本。 不幸的是,应用于模式的变更日志通常存储在不同的 Maven 项目中。这让他们很难找到。

Liquibase 不在DATABASECHANGELOG 表中存储实际的变更集内容(具体的 DDL)。这样就可以解决问题了。

在寻找解决方案时,我首先使用 maven 在执行 liquibase:update 时将 changelog 的 SVN 修订版存储到 DATABASECHANGELOG 中。 根据修订号检索变更日志很容易出错。

我现在花了一周的时间来寻找一个强大的解决方案,用谷歌搜索了几个小时并构建了几个测试用例(使用经过调整的父级和具体的 pom,部分使用 maven scm 插件等),但没有运气。最初,我计划使用 liquibase:tag 来存储文件路径 + 修订版,但这仅适用于所有变更集都在一个单独的变更日志文件中的情况,事实并非如此。

当然,最好将所有变更日志存储在一个位置, 但这并不总是可能的。例如,需要 DBA 权限的脚本必须提交给额外的 maven 项目。 我需要在每个变更集和对应的变更日志文件之间进行强引用,否则变更日志必须直接存储在DATABASECHANGELOG 中。

使用我们当前的设置,无法使用 Liquibase 进行“数据库版本控制”。有理论 可追溯性,但由用户以某种方式在 100 多个独立的 Maven 项目中找到原始变更日志。

问题 1:是否可以将每个变更集的实际变更日志内容存储到 DATABASECHANGELOG 中?

问题 2:如果没有,如何在 DATABASECHANGELOG 条目和原始变更日志文件之间保留引用?

(另外,当一个变更日志文件被意外从颠覆中删除时会发生什么?DATABASECHANGELOG 只会告诉我变更的日期和时间,一些细节和文件名 - 非常没用,因为 actual 文件将消失,并且无法恢复实际的 DDL。为了防止这种情况发生,我会备份 all 更改日志文件。为此,DATABASECHANGELOG meta数据不足,因为 Liquibase 不跟踪 SVN 版本和文件路径。)

【问题讨论】:

    标签: maven svn liquibase database-versioning


    【解决方案1】:

    一种选择是使用 SVN Externals 将各种 SVN 存储库组合成新的存储库,然后创建新的变更日志文件。
    您可以将 URL(SVN 标记/分支/修订)映射到文件夹,而无需使用 SVN Externals 进行复制。 http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html.

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2021-01-18
      相关资源
      最近更新 更多