2016-03-31 39 views
0

我們正在使用liquibase進行數據庫版本控制。我們使用它來將數據庫更改部署到任何層,例如TST,AT和PROD。我們構建一次並將相同的更改部署到各處,但我們有某些應該部署到特定層的東西。我不確定這是可能的還是不是從liquibase腳本運行環境特定更改

eg

假設我們將應用程序URL存儲在數據庫中,並且每個環境(INT,UAT,PROD)都有它自己的不同應用程序URL。我們如何使用liquibase腳本來做到這一點?

回答

1

您可以使用可用的變更的contextslabels屬性和命令來完成你想要的。

This Liquibase blog post goes into detail.下面是從文章報價描述上下文:

上下文中Liquibase已經使用了相當長一段時間,他們 開始了,主要爲「標記」的變更,使他們能夠有辦法在運行時選擇 。一個常見的用途是用於標記插入 測試數據作爲背景=」測試」的變更,使您的開發和QA 環境中,您可以運行與-contexts =測試liquibase得到 測試數據和生產環境中,與運行 - contexts = prod沒有 測試數據。上下文對基於 功能集標記changeSets也有幫助,包括(context =「shoppingCart」)或包 (context =「pro」)甚至customer(context =「acme_inc」)。對於複雜的 情況下,多個上下文可以應用到變更如 上下文=」 acme_inc,親」和多個上下文可以在運行時 可以選擇諸如-contexts =免費,QA。

隨着Liquibase 3.2,支持加入到用於上下文中的表達式在 變更。現在,在定義changeSet時,可以指定 複雜邏輯,如context =「!test」或context =「qa或(acme_inc和 dev)」。但是,上下文邏輯只能在changeSet 定義中指定。運行Liquibase時,您仍然可以指定 多個上下文,但您只列出 適用於當前Liquibase運行的所有上下文。