我们正在尝试将Liquibase用于SQL Server,并对上下文和标签有疑问。在部署到我们的Dev,TST和Prod环境时,我们使用了特定于env的sql server同义词和链接服务器。例如,在部署到TST时,链接服务器和同义词将指向SERVER_A,但Prod应指向SERVER_B。有没有办法让Liquibase根据我们在发布时部署的环境自动交换正确的SERVER值?
答案 0 :(得分:0)
用于支持此功能的Liquibase功能包括labels, contexts和changelog parameters。您可能在更改日志中有类似的内容:
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<property name="linked.server" value="SERVER_A" context="TST"/>
<property name="linked.server" value="SERVER_B" context="Prod"/>
<changeSet id="1" author="Brian">
<sql>CREATE LINKED SERVER STATEMENT SO LINKED SERVER IS ${linked.server}</sql>
</changeSet>
</databaseChangeLog>
我不知道用于创建所需内容的Sql Server语法,因此该示例并不完全正确,但主要的是您可以在其中使用变量引用${linked.server}
。 SQL Server同义词或链接服务器没有内置的Liquibase重构,因此您可以使用<sql>
标记或编写自己的Liquibase扩展来实现新的<synonym>
和/或{{ 1}}标签。
当您运行<linkedServer>
时,您将提供参数
liquibase update
或--context=TST
并取代适当的值。