2011-11-25 57 views
2

我一次又一次地面對多個環境的問題,這些環境必須單獨配置爲可在所有應用程序中運行的應用程序(例如質量保證,區域生產環境,開發,分段等)我想知道什麼是組織不同配置的最佳方式?生產與質量保證配置

它會在數據庫中嗎?每個環境配置文件不同?或者,也許有不同的部分/ XML標籤相同的文件?這些如何被部署?嵌入在應用程序中?或者在安裝後手動將其置於原地進行修改?

這個問題不是特定於技術的 - 我使用過.net和Java,網絡應用程序和桌面應用程序,這個問題一次又一次地出現。我期待着學習不同的方法來適應混合動力來解決這個問題。

編輯:我必須指出的一個警告 - 當配置是部署解決方案的一部分時,它通常安裝在主機上的root用戶下。在大型組織中,開發人員通常不具有對生產主機的根訪問權限,因此對配置的任何更改都需要新的生成和部署。不用說,這是不是最好的做法 - 尤其是在有涉及多個團隊和各級審批非常嚴格的釋放過程組織...(我知道!)

回答

1

從傑斯謙卑和大衛·法利的書「Continuous Delivery (page 41)」借來的,您可以:

  • 構建腳本可以拉配置,並將其納入您的二進制文件在構建時間。
  • 您的包裝軟件可以在包裝時注入配置,例如創建組件,耳朵或寶石時。
  • 您的部署腳本或安裝程序可以獲取必要的信息或要求它的用戶,它在 部署時間傳遞給你的應用爲安裝過程的一部分。
  • 您的應用程序本身可以在啓動時間獲取配置運行時間

它被認爲是不好的做法,由他們來注入配置文件中建立和編譯時間,因爲你應該能夠在同一二進制文件部署到每個環境。

我的經驗是,您可以將每個環境(敏感信息除外)的所有配置文件烘焙到您的部署文件(war,jar,zip等)。並且您可以設計應用程序在啓動時獲取額外的參數,以便在應用程序啓動時獲取正確的配置文件集(從提取的部署文件或從本地/遠程文件系統(如果它們是敏感的,或來自數據庫) 。

+0

這很有道理!我認爲應該在安裝/部署時選擇application/env特定的配置,並且應該在啓動/訪問時應用用戶特定的配置。 – Alexandra

1

這個問題很難回答,因爲它是有些模糊。就我所知,沒有配置技術的方法。具體如何設置配置取決於所討論的語言/技術。

我對.net不熟悉,但用java一個流行的方法是有一個maven build set up with different profiles。每個配置文件都是特定於環境的。然後,您可以定義有特定的環境值不同的屬性文件,從上面的鏈接的例子是:

  • environment.properties - 這是默認的配置,並會在默認情況下,神器包裝。
  • environment.test.properties - 這是測試環境的變體。
  • environment.prod.properties - 這與測試版本基本相同,將用於生產環境。

然後,您可以建立您的項目如下:

mvn -Pprod package 
+0

在Asp.net應用程序中,您可以設置部分配置文件以對應構建類型(Debug vs Release)。然後,系統將選擇正確的配置部分來組合一個合適的配置/屬性文件,類似於你的maven示例。 – Alexandra

0

我有一個好消息和一個壞消息。

好消息是Config4 *(其中我是維護者)巧妙地解決了這個問題,它支持自適應配置。基本上,這是配置文件能夠適應其運行環境(包括主機名,用戶名,環境變量和命令行選項)的能力。有關詳細信息,請閱讀「入門」手冊的Chapter 2。別擔心:這是一個簡短的章節。

壞消息是,目前,Config4 *實現僅適用於C++和Java,因此您的.Net應用程序運氣不佳。即使使用C++和Java應用程序,將Config4 *改裝爲現有應用程序也不會有實際意義。因此,我建議嘗試僅在新的應用程序中使用Config4 *。

儘管有壞消息,但我認爲閱讀Config4 *文檔的上述章節是值得的,因爲這樣做可能會爲您提供適應您需求的想法。