Linux
您如何將版本控制、測試和持續集成/部署等開發實踐應用於系統管理?
想像一下,您要管理許多伺服器,這些伺服器具有許多人使用的許多不同服務。現在假設您要重新配置或替換其中一台伺服器上的某些軟體。顯然,您不想在生產中的伺服器上工作。
如果這是程式碼更改,作為開發人員,我會在本地開發機器上進行更改,在本地進行測試並將更改送出到版本控制系統。然後可以將更改部署在暫存環境中,進一步測試並最終部署在生產環境中。如有必要,我也很容易回滾。
一般來說,或者俱體來說,您如何在系統管理中實現這一點?
(首先想到的是使用虛擬機並將虛擬機映像放入版本控制中,但我確信有很多我目前不知道的文獻和聰明的解決方案。)
簡短的回答是“作業系統部署管理”、“配置管理”和“軟體打包”。長答案如下。
我想在 Daniel Pittman 的回復中添加對系統管理中“系統”構成的細分。
系統或環境將包括:
- 伺服器
- 作業系統
- 配置
- 供應商套餐;和
- 本地套餐
封裝這些將是過程,例如:
- 作業系統部署或映像
- 配置管理
- 軟體包管理
- 審計/記錄
- 監控
- 備份
您希望將這些結合在一起以幫助您實現非功能性目標,例如:
- 重複性
- 可維護性
- 可測量性
- 表現
- 可追踪性
- 可測試性
- 可變性
這是一個快速的大腦轉儲。我確信可以將更多內容添加到所有列表中。
您的問題涉及其中的一些,但沒有使用特定的詞語。例如,您希望能夠輕鬆部署並恢復,即希望可維護性;你想在測試環境中做它並測試直到它通過,即可重複性、可測試性和可測量性;您正在考慮將 vm 映像置於版本控制中,因為您希望作業系統和配置部署的可重複性。
有很多工具可以幫助您解決這個問題,其中一些是 Daniel 提到的。其他一些是:
- 用於部署已知作業系統環境的 Kickstarts(基於 RedHat)、Preseed(基於 Debian)、WDS(MS Windows)
- Spacewalk/Satellite(基於 RedHat)、用於配置和包管理的組策略 (MS Windows)
- YUM 和 APT 打包系統,用於生成、部署、升級和刪除包(包含一個軟體的二進製文件、數據和配置集)
- 用於監控的 Nagios、OpenNMS 和 SCOM
- 用於備份的 Amanda、Bacula 和 Windows 備份伺服器
- 用於性能監控的 Munin、PCP 和 Hyperic
- 用於版本控制的 CVS、SVN、GIT 或 Bazaar
- Hudson 和 Jenkins 用於建構管理
- 用於測試的 Selenium 和 Robot
- 用於記錄、通信和跟踪的 Bugzilla、Request Tracker 和 Jira
同樣,這不是一個完整的列表,而是我腦海中的一些東西來指導我,希望它也能幫助你。