配置管理
問:配置管理什么?
答:配置管理是一個過程。通過這個過程,所有與項目相關的產物,以及他們之間的關系都被唯一定義、修改、存儲和及檢索。
配置管理策略
- 記錄你的系統及應用程序的演進過程
- 對團隊成員協作方式的管理
1.為管理應用程序的構建、部署、測試和發布過程做好準備。
2.管理應用軟件的配置信息
3.整個環境的配置管理,這包括應用程序所依賴的軟件、硬件和基礎設施。
環境管理背后的原則,包括操作系統、應用服務器、數據庫和其他商業現貨(COTS)軟件.
2.2使用版本控制
1. 對所有內容進行版本控制
- UNIX下的專屬工具——SCCS(源代碼控制系統)
- RCS(修訂控制系統)
- CVS(并發版本控制系統)
- 開源工具——Subversion、Mercurial和Git
將所有的東西都提交到版本控制是重要前提——持續集成、自動化測試、一鍵式發布和部署
版本控制的目的:
1.對于我們開發的應用軟件,某個特定的版本由哪些文件和配置組成
如何再現一份與生產環境一模一樣的軟硬件環境
2.什么時候修改的內容,是誰修改的,以及為什么要修改
2.頻繁提交代碼到主干
(1)提交代碼之前運行測試套件
(2)增量式引入變化提交代碼
3.使用意義明顯的提交注釋
2.3依賴管理
1.外部庫文件管理
外部庫文件以二進制的形式存在,除非使用解釋型語言;
通常安裝在全局系統路徑中,并由包管理系統來管理(Ruby的Gems和Perl的modules)
2.組件管理
組件之間相互關聯,敲幾行代碼,就可以以正確的順序構建組件。
2.4軟件配置管理
1.配置與靈活性
先提供具有高價值且可配置程度較低的功能,再根據需要添加可配置選項。
2.配置的分類
(1)在生成二進制文件時,構建腳本可以在構建時引入相關配置項。
(2)不建議構建或打包時將配置項植入,應將相同的二進制安裝包向所有的環境中部署——確保發布的軟件被測試過。相鄰的兩次部署之間,任何變更都應被作為配置項捕獲和記錄。
(3)軟件在啟動或運行時可獲取其配置項。
(4)在安裝部署軟件程序時,部署腳本或安裝程序可獲得必要的部署信息。
3.應用程序的配置管理
(1)如何描述配置信息?
- 通常以鍵值對的形式來表示;
- 應用軟件的配置信息一般保存在:數據庫、版本控制庫、文件目錄或注冊表;
- 配置信息的安全性:特定于測試環境或生產環境的配置信息有必要存放于與源碼分離的單獨代碼庫中。例:不要把密碼簽入到版本控制系統中;不要把密碼硬編譯到應用程序中。
(2)獲取配置信息
- 文件系統(跨平臺和各語言的支持)缺點:集群時,配置信息同步成為問題。
- 從某個中心庫中獲取信息
- 開源工具ESCAPE通過REST式接口獲取和管理配置信息
- 應用程序可執行HTTP GET請求,在URI中包含應用程序名和環境名稱。(在部署和運行時的配置信息更有效)
- 將環境名稱傳給部署腳本,再由部署腳本從配置服務獲取配置信息
(3)為配置項建模
配置信息由元組構成。元組及取值取決于:應用程序、應用程序的版本、該版本所運行的環境。
不同環境管理配置信息的方法:把預期的生產環境的配置信息作為默認信息,在其他環境中,通過適當的方式覆蓋默認值。
(4)系統配置的測試
- 保證配置設置中對外部服務的引用是良好的
- 當應用程序一旦安裝好,就要在其上進行一些冒煙測試(若應用程序所依賴的任何部分沒有準備好,部署或安裝腳本都應該報錯),以驗證它正常運行。
4.跨應用的配置管理
為每個應用程序維護一份所有配置選項的索引表,記錄配置保存在什么地方,生命周期以及怎樣修改他們。
5.管理配置信息的原則
(1)在應用程序的生命周期中,應該在什么時候注入哪類配置信息
(2)將應用程序的配置項與源代碼保存在同一個存儲庫中,但要把配置項的值保存在別處。
(3)通過自動化的過程將配置項從保存配置信息的存儲庫中取出并設置好。
(4)配置系統應該能依據應用、應用軟件的版本、將要部署的環境,為打包、安裝以及部署腳本提供不同的配置值。
(5)對每個配置項有良好的命名習慣(易懂)
(6)配置信息模塊化且封閉
(7)DRY(Don't Repeat Yourself);是每個配置元素在整個系統中唯一
(8)最少化,即配置信息盡可能簡單且集中。
(9)確保測試已覆蓋到部署或已安裝時的配置操作。
2.5環境管理
高效配置管理策略的兩個原則
- 將二進制文件與配置信息分離
- 將所有的配置信息保存在一處
1.環境管理工具
Puppet和CfEngine、虛擬化技術
2.變更過程管理
應該用相同的機制來管理、配置、部署生產環境和測試環境
未經組織內部正式的變更管理過程,不得修改生產環境
總結與感悟
- 配置管理是基礎,沒有配置管理,就沒有持續集成、發布管理和部署流水線。
- 依靠保存在版本控制中的數據,可以從無到有重建生產系統。
- 可以將應用程序回滾到以前某個正確的狀態下。
- 確保在測試、試運行、正式上線時,以同樣的方式創建部署環境。
- 對于第一章的問題,理解了新成員可以快速的構建應用程序、修改代碼會給出提示、怎樣控制使其自動化及可返回待發布的版本,都是通過版本控制實現的
- 對配置項建模及怎樣配置還不是特別理解.......