我们正在使用 liquibase 进行数据库版本控制。我们使用它将数据库更改部署到任何层,例如 TST、AT 和 PROD。我们构建一次并将相同的更改部署到任何地方,但我们有某些东西应该部署到特定层。我不确定这是否可能或不是
例如
假设我们将应用程序 URL 存储在数据库中,并且每个环境(INT、UAT、PROD)都有自己不同的应用程序 URL。我们如何使用 liquibase 脚本来做到这一点?
我们正在使用 liquibase 进行数据库版本控制。我们使用它将数据库更改部署到任何层,例如 TST、AT 和 PROD。我们构建一次并将相同的更改部署到任何地方,但我们有某些东西应该部署到特定层。我不确定这是否可能或不是
例如
假设我们将应用程序 URL 存储在数据库中,并且每个环境(INT、UAT、PROD)都有自己不同的应用程序 URL。我们如何使用 liquibase 脚本来做到这一点?
您可以使用变更集和命令可用的contexts
和labels
属性来完成您想要的。
这篇 Liquibase 博客文章进行了详细介绍。这是那篇描述上下文的文章的引述:
Liquibase 中的上下文已经有很长一段时间了,它们最初主要是作为“标记”变更集的一种方式,以便可以在运行时选择它们。一种常见用途是将插入测试数据的 changeSet 标记为 context=”test”,以便在您的开发和 QA 环境中您可以使用 –contexts=test 运行 liquibase 以获取测试数据,并在生产中使用 –contexts=prod 运行没有测试数据。上下文也有助于标记基于特征集的变更集以包括(context=”shoppingCart”)或捆绑(context=”pro”)甚至客户(context=”acme_inc”)。对于复杂的情况,可以将多个上下文应用于 changeSet,例如 context=”acme_inc, pro”,并且可以在运行时选择多个上下文,例如 –contexts=free,qa。
在 Liquibase 3.2 中,增加了对 changeSets 中上下文表达式的支持。现在,当你定义你的 changeSet 时,你可以指定复杂的逻辑,例如 context=”!test” 或 context=”qa or (acme_inc and dev)”。但是,上下文逻辑只能在您的 changeSet 定义中指定。运行 Liquibase 时,您仍然可以指定多个上下文,但您只是列出了适用于当前 Liquibase 运行的所有上下文。