有您能做到這一點的幾種方法,第一種方法是檢查在後部署腳本環境等..
if @@servername = 'dev_server'
begin
insert data here
end
稍微清潔的版本有不同的腳本爲每個環境的文件,並通過導入它們,R進口SQLCMD腳本,所以你可以有:
- PostDeploy.sql
- DevServer.sql
- QAServer.sql
然後
if @@servername = 'dev_server'
begin
:r DevServer.sql
end
if @@servername = 'qa_server'
begin
:r QAServer.sql
end
您將需要確保到.sql文件的路徑是正確的,你複製它們與dacpac。
您不必使用@@服務器名稱,你可以使用SQLCMD變量,並通過他們在每一個環境,又幹淨了一點比硬編碼的服務器名稱。
第二種方法是moodify的dacpac與環境的具體之一更改後delpoy劇本,這是我的首選和最有效的CI構建的一部分,我的過程是:
- 檢查-in改變
- 構建服務器建立dacpac
- 構建需要dacpac,複製到開發,質量保證,督促等ENV文件夾
- 構建替換後部署腳本在每個特定的ENV腳本
我所說的腳本PostDeploy.dev.sql,PostDeploy.Qa.sql等,並設置構建動作爲「無」或將其添加爲「腳本,而不是在構建」。
要更換你只需要使用部署後腳本。淨包裝API或一些例子來看看我的Dir2Dac演示這確實是多:
https://github.com/GoEddie/Dir2Dac
更具體:
https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs
var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain");
using (var reader = new StreamReader(_postDeployScript))
{
reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite));
}
謝謝您的詳細解答。暫時我想我會使用你在「稍微更清晰的版本是爲每個環境有不同的腳本文件」中描述的多腳本方法。也許我們會在需求到達時查看DacPac方法。 – Dib
我需要看看你正在使用的後一個選項,Ed。考慮到其中一些初始人口腳本的可能大小,這將是大量的數據包含在每個腳本中。我們正在考慮只要查看構建變量(如果它是「新建」)並立即運行發佈後的新事物(這可能是當前更好/更容易的選擇)。 –