带 AND 的 Liquibase 上下文

Liquibase context with AND

liquibase documentation 中写道,可以在用 AND、OR、! 指定的变更集中定义上下文。和括号。但是我没有找到将 contexts=" V1.0 AND V2.0" 参数传递给 liquibase(通过命令行)的方法,因为每次我这样做时,liquibase 都会生成一个空的 SQL 文件。这就是我的尝试方式:

 .\liquibase --url=offline:mssql? `
--changeLogFile="C:\Users\Ferid\Documents\Box Sync\PRIVATE_Ferid\liquibase-3.5.5-bin\cl.xml" `
--outputFile="C:\Users\Ferid\Documents\Box Sync\PRIVATE_Ferid\liquibase-3.5.5-bin\output.sql" `
--contexts="V1.0 AND V2.0" `
updatesql

当我只传递一个上下文或使用 V1.0, V2.0 时它工作正常,以便他使用两个版本之一生成所有变更集,但我只需要生成具有这两个上下文的变更集(V1. 0 和 V2.0).

这是我的变更日志文件的上下文属性的示例

<changeSet author="Ferid" id="1536838228609-1" context="V1.0"> ... </changeSet>
<changeSet author="Ferid" id="1536838228609-2" context="V2.0"> ...</changeSet>

<changeSet author="Ferid" id="1536838228609-3" context="V1.0 AND V2.0"> ...</changeSet>

我尝试过不同的语法,但 none 对我有用。我正在使用 liquibase 3.5.5.

上下文最适用于环境之类的东西(想想 DEV、STAGING、PRODUCTION)。对于您正在做的事情,最好使用标签。

标签和上下文均可用于控制将变更集应用于不同环境的位置和时间。它们经常相互结合使用。

这个table表达了一个关键的区别:

                   labels             contexts
in commands        expression         list
in changelog       list               expression

因此,当您定义变更日志时,每个变更集都可以有一个 'labels' 属性,该属性可以包含以逗号分隔的标签列表。每个变更集都可以有一个 'contexts' 属性,该属性可以包含上下文的复杂表达式。复杂的表达式是 "qa or (acme_inc and dev)"

相反,当使用命令(即部署)时,您可以为标签指定一个复杂的表达式,但只能是一个上下文列表。

下面链接的文章进行了深入探讨,但一般来说,当您可以简单地 enumerate/describe 更改集的用途时,标签很有用,但部署时环境描述起来很复杂。当应该在其中部署变更集的 'context' 是一个复杂的决定,最好留给变更集作者而不是部署者时,上下文很有用。

在博客中了解更多关于 Liquibase 如何处理这些的地方 post Nathan 写道:http://www.liquibase.org/2014/11/contexts-vs-labels.html