2009-06-09 56 views
2

我正在開發一個組合的Web /客戶端應用程序,該應用程序具有用於生產,測試和開發的分支。我使用svn post commit hooks將更新部署到生產和測試服務器。客戶端應用程序需要根據生產,測試或開發指向不同的URL。我怎樣才能使用顛覆管理這個?我想過的選項有:如何使用顛覆管理生產/測試/開發配置信息?

選項1
保持文件與特定的分支細節從未分支之間的合併。

從構建管理的角度來看,此選項更容易出錯,但容易出錯,因爲每次執行合併時都必須記住忽略該更改。

選項2
建立生產,測試和開發版本的客戶端,無論哪個部門,並依靠SVN掛鉤拉下正確的二進制文件。

你是如何處理這個問題的?任何更好的想法?

回答

1

我的首選項是不檢查項目特定的配置文件到源代碼控制,而是將環境變量和其他配置方面的內容保存在一個公共文件夾(在源代碼管理中)。然後根據給定項目,解決方案和環境在給定時間可能需要的內容,將配置文件生成爲本地構建,構建自動化或部署腳本的一部分。這可以通過簡單的文本文件,xml模板或類似Spark視圖引擎的更復雜的東西來完成,具體取決於您的需要。如果模板比你需要的更復雜(通常是這樣),你也可以按慣例做到這一點。這樣,無論您在何處部署代碼,都可以定義特定於環境的配置。

按照慣例的一個例子是在你的主配置文件(web config,app config等)中定義自定義配置節。然後,您可以存儲connection-strings-development.config,connection-strings-integration.config,connection-strings-testing.config,connection-strings-pre-production.config和connection-strings-production。配置在您的主要來源(或公用文件夾)中。然後,構建過程會將適當的連接字符串配置文件重命名爲connection-strings.config。

通過模板生成,您也可以使用具有相同環境特定配置文件的自定義配置節,但不是在部署時重命名,而是直接用適當的配置文件名直接重寫基本配置文件的一部分。

保持您的配置文件由環境分塊,但爲您提供了極大的靈活性,特別是一旦您開始管理使用相同或相似配置樣式的許多站點時。無論如何,你的配置應該由你的自動化環境的某些方面決定!

2

我們的應用程序爲每個部署的環境保留一個單獨的目錄和配置文件。當構建服務器運行要爲特定環境部署的任務時,它知道從哪個目錄中提取配置文件。指向正確目錄的指針是構建服務器的構建定義的一部分(在我們的例子中爲Pulse)。代碼從哪個分支構建的Pulse任務也是任務規範的一部分。這使得部署服務器的決策獨立於分支機構,因此我們發佈新版本的服務器和數據庫可以重新利用。

+ dev-server 
+---jdbc.properties 
+---build.properties 
+ test-server 
+----jdbc.properties 
+---build.properties 

配置文件沒有與應用程序的其餘部分(樹幹,分支等的同級...)分支。他們在svn樹中有他們自己的位置,並作爲Subversion external definition被拉入每個分支。

我們這樣做,因爲每個分支可能有很多服務器部署(開發,測試,構建,自動化等)。

+0

啊,這是有道理的。我也喜歡你在分支和特定的部署環境之間沒有任何耦合。謝謝(你的)信息! – Luke 2009-06-09 23:00:05