CI/CD 工具選型:Jenkins 還是 Bamboo?

持續(xù)集成和持續(xù)交付是在軟件開發(fā)生命周期中獲得交付一致性的方法。作為一個(gè)流程,它幫助你自動(dòng)化開發(fā)管道,同時(shí)確保所有事情都可跟蹤。其中有趣的部分是在開發(fā)階段中引入自動(dòng)化。當(dāng)我們談到集成和交付時(shí),另一個(gè)與之匹配的過程是“持續(xù)測試”,或者有時(shí)我們稱之為 DevOps 測試。雖然持續(xù)集成(CI)和持續(xù)交付(CD)已經(jīng)成為 DevOps 的重要組成部分,但在選擇最佳工具時(shí),DevOps 團(tuán)隊(duì)常常會(huì)陷入困境。如果沒有 CI/CD 工具是無法想象的。
本文最初發(fā)布于 DZone,經(jīng)原作者授權(quán)由 InfoQ 中文站翻譯并分享。
持續(xù)集成(CI)和持續(xù)交付(CD) 已經(jīng)成為 DevOps 的重要組成部分,但在選擇最佳工具時(shí),DevOps 團(tuán)隊(duì)常常會(huì)陷入困境。開源工具是否適合你的項(xiàng)目需求,還是應(yīng)該選擇專有工具?特性更新和現(xiàn)有的客戶反饋如何?
我的團(tuán)隊(duì)經(jīng)常被這些突出的問題所困擾,這促使我們對各種 CI/CD 工具進(jìn)行比較。在本文中,我們將仔細(xì)分析 Bamboo 與 Jenkins 之間的差異,使你對如何正確選擇 CI/CD 工具有更深入的認(rèn)識(shí)。
在具體比較 Bamboo 和 Jenkins 之前,讓我們先了解一些基礎(chǔ)內(nèi)容。
Jenkins 是什么?
Jenkins 是當(dāng)今市場上廣泛使用的 CI/CD 工具之一。人們已經(jīng)使用它很長時(shí)間了,如果組織在尋找理想的開源 CI/CD 工具,那么它非常合適。Jenkins 是用 Java 編寫的,它提供了大量的特性以及在主要平臺(tái)上的可移植性。

Jenkins 是開源且免費(fèi)的,是早期創(chuàng)業(yè)公司的首選。許多成長階段的組織也比較喜歡 Jenkins,因?yàn)樗麄兛梢酝ㄟ^自動(dòng)化加速軟件產(chǎn)品的開發(fā)。Jenkins 可用于 Windows、macOS 等平臺(tái),以及 openSUSE、Red Hat、Ubuntu 等不同風(fēng)格的 Linux。
Jenkins 是可擴(kuò)展的,并且有一個(gè)蓬勃發(fā)展的插件生態(tài)系統(tǒng)。Jenkins 的插件可以幫助你整合各種 DevOps 階段。它遵循兩條發(fā)布線——每周發(fā)布和 LTS(長期支持),類似于其他常用的開源項(xiàng)目。
在撰寫這篇比較 Bamboo 和 Jenkins 的文章時(shí),Jenkins LTS 的最新版本是 2.235.1,Jenkins 每周發(fā)布版本的最新版本是 2.242。
以下是 Jenkins 的主要特性:
免費(fèi)、開源;
很棒的插件;
廣泛的社區(qū);
支持管道;
支持并行執(zhí)行;
廣泛的集成能力;
易于安裝配置;
提供 REST API。
Bamboo 是什么?
Bamboo Server 也是用于持續(xù)集成(CI)的流行工具。它是由 Atlassian 在 2007 年開發(fā)的,該組織以項(xiàng)目跟蹤軟件 JIRA 而聞名。Bamboo 是一個(gè)商業(yè)產(chǎn)品,它允許你在單個(gè)工作流中執(zhí)行自動(dòng)化構(gòu)建、測試和發(fā)布。

使用 Bamboo Server,通過無縫集成 Jira 和 Bitbucket 服務(wù)器,你可以實(shí)現(xiàn)發(fā)布、執(zhí)行、質(zhì)量和狀態(tài)的端到端可視化。它還提供了內(nèi)置部署支持、自動(dòng)合并和 Git 分支等特性。Bamboo 支持編程擴(kuò)展和組合。Bamboo 可用于 Windows、Mac OS X 和 Linux 等平臺(tái)。在撰寫這篇 Bamboo 和 Jenkins 的對比文章時(shí),Bamboo Server 的最新版本是 7.0.3。
Bamboo 的主要特性包括:
可以從 Jenkins 無縫遷移;
內(nèi)置 Jira 軟件和 Bitbucket Server 集成;
內(nèi)置 Git 分支工作流;
內(nèi)置部署項(xiàng)目;
測試自動(dòng)化;
支持并行執(zhí)行;
提供 REST API;
安裝配置簡單。
現(xiàn)在讓我們對比下,看看 Bamboo 和 Jenkins 在可用性、技術(shù)支持和其他優(yōu)秀 CI/CD 工具必備的集成特性方面哪個(gè)更好。
Bamboo 和 Jenkins 的對決
相關(guān) CI/CD 工具的介紹就到這里,現(xiàn)在可以進(jìn)入正題了。以下是我們在對 Bamboo 和 Jenkins 進(jìn)行比較時(shí)使用的主要指標(biāo)。
安裝和配置
Jenkins 很容易安裝,因?yàn)樗且粋€(gè)自包含的 Java 程序,能夠以開箱即用的方式運(yùn)行。在此之前,必須在目標(biāo)機(jī)器上安裝 Java,Jenkins 的安裝非常簡單。Jenkins 支持 JDK8,最新版本也已開始支持 Java 11 環(huán)境。
安裝完之后,使用一個(gè)簡單的 Web 界面執(zhí)行配置檢查。Jenkins 可以安裝到 Windows、Mac OS X 和流行的 Linux 操作系統(tǒng)上。我們還可以將 Jenkins 作為 servlet 運(yùn)行在不同的 Java servlet 容器中,如 GlassFish 或 Apache Tomcat。然而,Jenkins 缺乏現(xiàn)成的支持,但你可以在一個(gè)龐大的社區(qū)中提出問題。由于它是一個(gè)開源工具,這也正常。
與 Jenkins 相比,安裝和配置 Bamboo Server 所需的步驟更多。通常,你需要在機(jī)器上安裝 Java,然后創(chuàng)建一個(gè)專門的用戶來運(yùn)行 Bamboo。這里,你還必須創(chuàng)建一個(gè)主目錄,根據(jù)需要啟動(dòng)并配置 Bamboo Server。安裝過程可能有點(diǎn)費(fèi)時(shí),但你會(huì)發(fā)現(xiàn) Bamboo 的用戶界面更友好。
就這兩款 CI/CD 工具的設(shè)置和配置而言,Jenkins 和 Bamboo 都很好用。這方面的評價(jià)可能比較主觀,因?yàn)樗Q于你的需求。
擴(kuò)展和定制
Jenkins 和 Bamboo 都提供了 RESTful API 用于擴(kuò)展。如果你計(jì)劃將應(yīng)用程序與 Bamboo Server 集成,那么可以使用 Bamboo REST API。計(jì)劃在腳本中與 BambooServer 交互的管理員也可以使用。默認(rèn)的響應(yīng)格式是 JSON,但是可以選擇請求 XML 而不是 JSON。
Jenkins 的遠(yuǎn)程訪問 API 可用于 Python、XML 和 JSON。與 Bamboo 中的 API 一樣,Jenkins API 也可以用于觸發(fā)新的構(gòu)建、創(chuàng)建作業(yè)、從 Jenkins 獲取資源消耗信息等操作。
易于使用
在用戶友好度方面,Bamboo 較 Jenkins 有著巨大的優(yōu)勢。Bamboo 有一個(gè)友好直觀的用戶界面,可以根據(jù)用戶需求定制。但是它否決了 Jenkins 嗎?不!這取決于你使用這些工具的方法。一旦你開始使用 Jenkins,你就會(huì)意識(shí)到它主要關(guān)注的是功能,其次才是可用性。
每當(dāng)在 Bamboo 中添加新任務(wù)時(shí),它都會(huì)提供關(guān)于構(gòu)建和部署狀態(tài)的詳細(xì)信息。而 Jenkins 關(guān)注的是,開發(fā)人員可以利用豐富的 Jenkins 插件根據(jù)他們的需要方便地定制體驗(yàn)。
如果要在 Bamboo 和 Jenkins 之間選出更好的 CI/CD 工具,那么你必須在功能和用戶友好性之間進(jìn)行取舍。
插件生態(tài)
插件為 CI/CD 工具提供了更強(qiáng)大的功能,但是你需要挑選出對你有幫助的那些。與 Bamboo 相比,Jenkins 的主要優(yōu)勢之一是其欣欣向榮的插件生態(tài)系統(tǒng)。Jenkins 是開源的,其全球性社區(qū)非常強(qiáng)大,插件的廣泛可用性就是證明。目前,社區(qū)貢獻(xiàn)的 1500 多個(gè) Jenkins 插件可以幫助構(gòu)建、DevOps 測試、部署和自動(dòng)化項(xiàng)目。
另一方面,在 Atlassian 市場上有將近 200 個(gè) Bamboo 插件(或附加組件)。內(nèi)置集成 Bitbucket、Jira 和 Confluence 是 Bamboo 服務(wù)器的最大賣點(diǎn)。
Jenkins 更多的是以功能為中心(通過插件),定制成本低,避免了昂貴的內(nèi)部定制。在插件競爭中,Jenkins 遙遙領(lǐng)先。
宿主(云或本地)
Bamboo 只有本地版本,因?yàn)樵瓢姹驹?2017 年初就停止提供了。雖然使用 BitBucket 管道替換了該服務(wù),但還是無法與 Bamboo Cloud 相比。
相反,Jenkins 有云版本和本地版本兩種版本可供選擇。Jenkins 最適合安裝在云上的自托管管道。如果你計(jì)劃在 DevOps 測試或開發(fā)中使用 Jenkins 的本地變體,那么使用 Jenkins 構(gòu)建可伸縮的架構(gòu)是一個(gè)不錯(cuò)的參考。
在云端 CI/CD 工具方面,Jenkins 有明顯的優(yōu)勢。
并行性
Jenkins 和 Bamboo 都支持并行構(gòu)建。對于 Bamboo 服務(wù)器,默認(rèn)情況下每個(gè)階段都有一個(gè)作業(yè),但是可以用它對多個(gè)作業(yè)進(jìn)行分組。為了在 Bamboo 中并行執(zhí)行作業(yè),必須有多個(gè)代理(即作業(yè)在多個(gè)代理上并行處理)。每個(gè)階段都必須完成它所有的作業(yè),計(jì)劃的下一階段才會(huì)開始執(zhí)行。
每個(gè)作業(yè)中的任務(wù)是順序執(zhí)行的;
每個(gè)階段中的作業(yè)是并行執(zhí)行的;
每個(gè)計(jì)劃中的階段是順序執(zhí)行的。
另一方面,Jenkins 中的并行性可以歸結(jié)到管道,我們可以:
根據(jù)我們選擇的語言將測試配置為并行;
將 Jenkins 構(gòu)建配置為參數(shù)化構(gòu)建;
將 Jenkins 項(xiàng)目設(shè)置為 Matrix 項(xiàng)目。
Parallel Test Executor 插件進(jìn)一步幫助你劃分大小相同的測試單元,然后將它們轉(zhuǎn)換為排除列表。然而,由于構(gòu)建共享相同的環(huán)境,Jenkins 只部分支持 DevOps 測試并行。當(dāng)使用像文件系統(tǒng)這樣的共享資源時(shí),這一因素會(huì)導(dǎo)致問題。
在 DevOps 測試中,Bamboo 和 Jenkin 的并行性都符合用戶的期望,在這方面的對決中,Bamboo 和 Jenkins 沒有明顯的贏家。
云集成
Bamboo 默認(rèn)集成了 JIRA、Bitbucket。這些集成有助于實(shí)現(xiàn)發(fā)布執(zhí)行、質(zhì)量和狀態(tài)的完全透明。Bamboo 只能用于 Windows、Linux、Solaris 和 macOS(或 OSX)平臺(tái)。它還支持 AWS。Bamboo Server EC2 向?qū)ё屇憧梢栽趲追昼妰?nèi)在 AWS 中啟動(dòng)并運(yùn)行 Bamboo 服務(wù)器。
人們希望提供在 Azure 云上部署 Bamboo 計(jì)劃的特性。然而,根據(jù) Azure 文檔,可以使用 Azure PowerShell 在 Azure 上部署 Bamboo 服務(wù)器。自動(dòng)化可以使用腳本任務(wù)來實(shí)現(xiàn)。當(dāng)在 Azure 中使用 Bamboo 時(shí),可以看下 StackOverflow 上關(guān)于使用 Bamboo 在 Azure 上實(shí)現(xiàn)持續(xù)部署的話題,這會(huì)很有幫助。此外,Bamboo 的 LambdaTest 集成 可以幫助你完成所有無縫 DevOps 測試需求。
另一方面,Jenkins 支持與多種云平臺(tái)集成,如 VMWare vSphere、Amazon EC2、谷歌云等。集成可以使用插件來實(shí)現(xiàn)。LambdaTest 提供了一個(gè)與 Jenkins 無縫集成的插件,以實(shí)現(xiàn)高效的 DevOps 測試。
Amazon EC2
谷歌云
Microsoft Azure
Digital Ocean
社區(qū)支持
由于 Jenkins 是一個(gè)開源項(xiàng)目,社區(qū)參與廣泛。社區(qū)支持是 Jenkins 比其他商業(yè) CI/CD 工具(如 Bamboo)擁有更多插件的主要原因。當(dāng)涉及到故障排除、經(jīng)驗(yàn)共享、評審、文檔等方面時(shí),社區(qū)會(huì)積極參與。Jenkins 還有一個(gè)活躍的 Jenkins 社區(qū)博客,提供了關(guān)于 Jenkins 的富有洞察力的信息。
Bamboo 在現(xiàn)有的 Atlassian 社區(qū)下也有一個(gè)支持論壇。在撰寫本文時(shí),社區(qū)中關(guān)于 Bamboo 服務(wù)器的帖子有 7890 篇。除了支持論壇,Atlassian 官方博客上也有關(guān)于 Bamboo 的博文。
由于 Jenkins 是開源的,并且多年來一直在開發(fā)(和使用)中,因此在社區(qū)支持方面,Jenkins 無疑會(huì)勝出。
特性和功能
強(qiáng)大的社區(qū)是 Jenkins 的支柱,但也不能忽視它的特性集。Jenkins 可用于構(gòu)建和分析代碼。它支持所有流行的版本控制系統(tǒng)和構(gòu)建系統(tǒng)。協(xié)作計(jì)劃 是 Jenkins 項(xiàng)目未來發(fā)展和擴(kuò)展的一個(gè)不可或缺的部分。
Bamboo 支持自動(dòng)合并,這有助于簡化 Git 和 Mercurial 分支的合并過程。它帶有內(nèi)置的 Git 分支和工作流,可以幫助你根據(jù)分支名稱自動(dòng)檢測、構(gòu)建、測試分支并合并到(準(zhǔn)備或生產(chǎn))服務(wù)器。Jira 是一款廣泛使用的跟蹤軟件,內(nèi)置 Jira 軟件集成是 Bamboo 的一大亮點(diǎn)。
除此之外,Bamboo 還提供了內(nèi)置的部署支持,可以自動(dòng)向測試環(huán)境發(fā)送連續(xù)的構(gòu)建流,并在準(zhǔn)備就緒時(shí)將構(gòu)建發(fā)布給客戶。
發(fā)布周期
和其他開源項(xiàng)目一樣,Jenkins 也遵循 LTS(長期支持)和每周發(fā)布周期。Jenkins 2.235.1 發(fā)布于 2020 年 6 月 17 日,是 Jenkins 的最新穩(wěn)定版本。官方網(wǎng)站上提供了 Jenkins LTS 和每周發(fā)布的更改日志。
在撰寫本文時(shí),Bamboo 服務(wù)器的最新版本是 7.0.3(2020 年 3 月)。在 Bamboo 歸檔中也可以下載到 Bamboo 的舊版本。
總的來說,就發(fā)布周期而言,Jenkins 和 Bamboo 都表現(xiàn)良好(而且及時(shí))。
分布式運(yùn)行(或執(zhí)行)
Bamboo 和 Jenkins 都可以運(yùn)行分布式作業(yè)。正如 Bamboo 社區(qū)所言,Bamboo 使用主從概念實(shí)現(xiàn)分布式運(yùn)行。
在使用 Jenkins 進(jìn)行分布式運(yùn)行時(shí)可能會(huì)出現(xiàn)性能問題,因?yàn)樗褂玫氖桥c運(yùn)行 GUI 相關(guān)任務(wù)相同的實(shí)例。
開源 vs. 商業(yè)
免費(fèi)軟件還是商業(yè)軟件?在選擇理想的 CI/CD 工具時(shí),這是一個(gè)最大的問題。
Jenkins 是一個(gè)開源項(xiàng)目,可以免費(fèi)使用。因此,對于正在尋找最佳 CI/CD 工具以加速其構(gòu)建和測試過程的早期初創(chuàng)公司來說,這是一個(gè)顯而易見的選擇。Jenkins 所涉及的唯一成本是基礎(chǔ)設(shè)施成本。雖然 Jenkins 有一定的學(xué)習(xí)曲線,但如果你了解團(tuán)隊(duì)對 Jenkins 的熟悉程度會(huì)好一些。
Bamboo 是來自 Atlassian 的商業(yè)軟件。它提供為期 30 天的試用。根據(jù)官方網(wǎng)站的介紹,Bamboo 適合各種規(guī)模的團(tuán)隊(duì)。價(jià)格取決于團(tuán)隊(duì)規(guī)模、代理個(gè)數(shù)及作業(yè)數(shù)量。
面向小型團(tuán)隊(duì)的 Bamboo Server——10 美元 (最多 10 個(gè)作業(yè),本地代理數(shù)不限,無遠(yuǎn)程代理)。
面向成長型團(tuán)隊(duì)的 Bamboo Server——1270 美元起(作業(yè)數(shù)不限、本地代理數(shù)不限、遠(yuǎn)程代理數(shù)取決于方案)。
CI/CD 工具的選擇取決于你的預(yù)算和項(xiàng)目需求。
Bamboo vs. Jenkins 對比快照
以下是 Bamboo 和 Jenkins 的對比快照:
| 特性 | JENKINS | BAMBOO |
|---|---|---|
| 開源或商業(yè) | 免費(fèi)(開源) | 商業(yè)許可 |
| 產(chǎn)品類型 | 自托管 / 本地 | 本地 |
| 安裝配置 | 簡單 | 簡單 |
| 易用性 | 相比于可用性,更專注于功能 | 易于使用和定制 |
| 官方支持 | 因?yàn)樗且粋€(gè)開源項(xiàng)目,所以沒有官方支持。可以通過 IRC、Jenkins 論壇和其他支持渠道獲得支持。 | 是 |
| Plugin 生態(tài)系統(tǒng) | 豐富的插件生態(tài)系統(tǒng)(1500 多個(gè)插件) | Atlassian 市場上有將近 200 個(gè)插件 |
| 并行性 | 是(部分) | 是 |
| 報(bào)表 | 是 | 是 |
| 構(gòu)建管道 | 通過 Jenkins Pipeline DSL 自定義管道 | Bamboo Cloud 于 2017 年停止開發(fā),取而代之以 BitBucket 管道,反應(yīng)不是很好。 |
| 集成 | 是 | 是 |
| REST API | 是 | 是 |
| 簡單易用的企業(yè)級權(quán)限 | 通過插件提供支持 | 是 |
| 在線文檔 | 是 | 是 |
| 內(nèi)置 Git 分支工作流 | 不支持 | 是 |
| 內(nèi)置 Jira 軟件集成 | 不支持 | 是 |
Bamboo vs. Jenkins:應(yīng)該選擇哪種 CI/CD 工具?
在選擇理想的 CI/CD 工具時(shí),沒有預(yù)先定義好的經(jīng)驗(yàn)法則。你必須從技術(shù)和預(yù)算的角度對該工具進(jìn)行清晰的評估。另外,看看你的團(tuán)隊(duì)具備什么樣的 CI/CD 工具知識(shí),因?yàn)檫@個(gè)過程會(huì)涉及到一個(gè)很長的學(xué)習(xí)曲線。
如果你正在尋找具有良好功能的 CI/CD 工具,那么就選 Jenkins 吧。然而,你的團(tuán)隊(duì)?wèi)?yīng)該有 DIY(自己動(dòng)手)精神,因?yàn)樗麄儗⒉坏貌皇褂?Jenkins 插件進(jìn)行定制。
如果你正在尋找一款具有良好用戶體驗(yàn)并與現(xiàn)有技術(shù)很好集成的工具,那么請選擇 Bamboo。建議在你(和你的團(tuán)隊(duì)成員)做出決定之前,先試用下這些工具。
選擇最好的 CI/CD 工具是成功的一半,因?yàn)槟闳匀恍枰P(guān)注部署,這是面向 DevOps 測試的敏捷開發(fā)中不可缺少的組成部分。建議不要忽略 CI 管道中的測試自動(dòng)化(或自動(dòng)化測試)。在執(zhí)行自動(dòng)化 DevOps 測試時(shí),基于云的測試平臺(tái)可以對集成和遷移提供重要幫助。
原文鏈接:
https://dzone.com/articles/bamboo-vs-jenkins-showdown-of-cicd-tools
—?完?—
掃一掃下面的二維碼 領(lǐng)取學(xué)習(xí)資料~
“掃一掃回復(fù):學(xué)習(xí)資料”

