使用主/從 Jenkins 伺服器與維護 3 個單獨的伺服器?
背景:
我是一名 SW 開發人員,有一些配置持續集成解決方案的經驗,但我對某些持續集成策略的優缺點不是很熟悉,並且想就兩種伺服器管理策略的優缺點提出建議。
問題:
我們有 3 個獨立的、複雜的 Android 應用程序,我正在為其創建持續集成伺服器。我已經成功地創建了一個執行 Windows Server 2008 的原型虛擬機,它成功地編譯了程式碼、啟動了一個模擬器並執行了 android 單元測試。另外,我還能夠執行我們希望在此程式碼上執行的靜態分析,以為開發人員提供回饋。
在之前使用 CruiseControl.NET 而不是 jenkins 的配置中,我們成功地維護了 3 個獨立的虛擬機,它們都具有獨立的虛擬化硬體。這種設置的好處是劃分 - 一個項目可以更改其建構伺服器,而不會影響另一個項目。
但是,轉移到 Jenkins,我注意到它支持主/從節點,這可以讓我配置一個具有多個項目的 Jenkins 主實例,然後配置多個從節點,據我所知,這些節點將執行任何 Jenkins 任務- 編譯、單元測試、靜態分析並將這些資訊傳回主伺服器。這種設置的好處似乎是:
- 可擴展性——我可以輕鬆添加第 4 或第 5 個項目並保持相同數量的從站
- 只需要設置 1 個 master 和 3 個 slave,這可能比 3 個單獨的 master 更容易設置。
這種情況的挑戰似乎是:
- 我必須學習如何創造奴隸
- 我將不得不處理客戶端和從屬之間的通信
- 我可能在執行需要 UI 互動的單元測試時遇到問題 - 發布描述如何執行無頭從屬設備
是否還有其他我忘記的直接好處或挑戰,或者有設置詹金斯經驗的人對哪種方法更合適有意見?
你的理解很全面。我唯一可以補充的是,在我看來,jenkins/hudson 中使用的“主/從”術語有點損壞。由於“奴隸”更像是觸發作業/建構/項目的分佈式方案中的執行者。我認為在您的情況下擁有 3 個獨立的詹金斯大師是不合理的。
- -我必須學習如何創建奴隸- 這不是一個真正的問題,它只是奴隸的一個 jar 文件。可以很容易地安裝在不同的作業系統(Linux、Windows、Unix)上,可以作為服務/守護程序執行。然後,您只需將該從屬設備附加到主設備即可。
2)我必須處理客戶端和從屬之間的通信——這也很簡單,因為您只需要管理從屬連接到客戶端的 ssh 密鑰和使用者帳戶。
3)我可能在執行需要 UI 互動的單元測試時遇到問題——這也不應該是一個問題。現在應該有很多解決方案。
我真的鼓勵你在 CI 和 CD 的開發工作流程中使用 jenkins,真的沒有 jenkins 做不到的事情。3 年前開始使用它,從未回頭。
我在您的特定情況下看到的唯一基石是它是一個新工具,並且在從舊工作流程遷移時可能會有一些學習曲線和一些調整,但很可能它將極大地使您和您的團隊受益從長遠來看。
希望這可以幫助。