带 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
在 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