在提升或部署構建時,我想自動交換單個數據庫連接文件。這可以作爲構建後步驟或作爲部署前的預包裝步驟完成。作爲構建後步驟交換測試數據庫連接代碼
被換出的文件是一個測試文件;正在交換的文件應該具有真正的數據庫連接配置。
這怎麼辦?我使用Hudson作爲CI服務器,如果有幫助的話,可以使用GitHub for SCM。
手動交換文件,恕我直言,是充滿人爲錯誤,可以完全忘記。此外,它還增加了一件事情,並阻礙了持續部署週期的勢頭。
在提升或部署構建時,我想自動交換單個數據庫連接文件。這可以作爲構建後步驟或作爲部署前的預包裝步驟完成。作爲構建後步驟交換測試數據庫連接代碼
被換出的文件是一個測試文件;正在交換的文件應該具有真正的數據庫連接配置。
這怎麼辦?我使用Hudson作爲CI服務器,如果有幫助的話,可以使用GitHub for SCM。
手動交換文件,恕我直言,是充滿人爲錯誤,可以完全忘記。此外,它還增加了一件事情,並阻礙了持續部署週期的勢頭。
也許你不需要替換整個文件。作爲部署腳本的一部分,我們使用powershell來讀取配置文件,並根據我們部署的位置使用一些xpath magic來查找和更改數據庫連接字符串以進行測試/生產設置。
其有效地搜索和替換。
以下是修改.NET Web配置文件的代碼片段,但對於其他基於xml的配置文件也可以做同樣的事情。
$Config = (Get-Content -Path <Path to web.config>) -as [xml]
@(
@{
xpath = '/configuration/appSettings/add[@key="Setting1"]'
edit = { $_.value = <Setting1 value> }
},
@{
xpath = '/configuration/connectionStrings/add[starts-with(@name, "ConnString")]'
edit = { $_.connectionString = "Data Source=<servername>;Initial Catalog=NorthWind;Integrated Security=SSPI" }
}
) |
ForEach-Object {
$Config.SelectNodes($_.xpath) |
ForEach-Object -Process $_.edit
}
$Config.Save(<path to web.config>)
的Windows
因爲我沒有PowerShell中:我實現了一個搜索和替換基於this blog post。請注意這種方法的一些侷限性。
的Linux/Unix
瞭解如何使用SED(man pages)。如果你有cygwin,你也可以使用sed。
太棒了!你介意分享多一點(有點迷你方法)?我有點小菜,並會深深地感激它。 – 2010-09-15 05:17:54
這是一小段代碼。我對哈德森不太熟悉,所以我不確定這會從哪裏執行。 – Darren 2010-09-16 07:17:41