【问题标题】:Run Environment specific changes from liquibase script从 liquibase 脚本运行特定于环境的更改
【发布时间】:2016-03-31 14:24:43
【问题描述】:
我们正在使用 liquibase 进行数据库版本控制。我们使用它将数据库更改部署到任何层,例如 TST、AT 和 PROD。我们构建一次并将相同的更改部署到任何地方,但我们有某些东西应该部署到特定层。我不确定这是否可能或不是
例如
假设我们将应用 URL 存储在数据库中,并且每个环境(INT、UAT、PROD)都有自己不同的应用 URL。我们如何使用 liquibase 脚本来做到这一点?
【问题讨论】:
标签:
oracle
liquibase
liquibase-hibernate
【解决方案1】:
您可以使用可用于变更集和命令的contexts 和labels 属性来完成您想要的。
This Liquibase blog post goes into detail. 这是一篇描述上下文的文章的引述:
Liquibase 中的上下文已经有很长一段时间了,它们
最初主要是作为“标记”变更集的一种方式,因此它们可以
在运行时选择。一种常见用途是标记插入的 changeSet
测试数据作为 context=”test” 以便在您的开发和 QA 中
您可以使用 –contexts=test 运行 liquibase 以获取
测试数据并在生产中使用 –contexts=prod 运行
测试数据。上下文也有助于标记基于
要包含的功能集 (context="shoppingCart") 或捆绑
(context=”pro”) 甚至是客户 (context=”acme_inc”)。对于复杂的
在这种情况下,可以将多个上下文应用于更改集,例如
context="acme_inc, pro" 并且可以在运行时选择多个上下文
比如--contexts=free,qa。
在 Liquibase 3.2 中,添加了对上下文表达式的支持
变更集。现在,当您定义您的 changeSet 时,您可以指定
复杂逻辑,例如 context=”!test” 或 context=”qa 或 (acme_inc 和
开发)”。上下文逻辑只能在你的 changeSet 中指定
然而定义。运行 Liquibase 时,您仍然可以指定
多个上下文,但您只是列出了所有上下文
适用于当前的 Liquibase 运行。