Github Actions還是Jenkins?該怎么選?
在過(guò)去的幾年中,DevOps已成為軟件生命周期中至關(guān)重要的一部分,這推動(dòng)了許多領(lǐng)先的DevOps工具和實(shí)踐的發(fā)展。您可以找到一系列支持CI/CD流程的工具,Jenkins和GitHub Actions杰出地站在其中。
在本文中,我將對(duì)GitHub Actions和Jenkins進(jìn)行比較,并為你提供洞察力以做出正確的選擇。
Jenkins和GitHub Action簡(jiǎn)介
Jenkins是一個(gè)免費(fèi)的、開(kāi)源的自動(dòng)化服務(wù)器。它幫助自動(dòng)化軟件開(kāi)發(fā)中與構(gòu)建、測(cè)試和部署相關(guān)的部分,促進(jìn)持續(xù)集成和持續(xù)交付。
同樣,GitHub Actions是GitHub作為SaaS產(chǎn)品提供的兩個(gè)產(chǎn)品中的最新產(chǎn)品。
GitHub Actions 現(xiàn)在讓您更容易在任何平臺(tái)上自動(dòng)構(gòu)建、測(cè)試和部署項(xiàng)目,包括 Linux、MacOS 和 Windows。在容器或虛擬機(jī)中運(yùn)行您的工作流。
在決定是否值得改變之前,讓我們先了解誰(shuí)應(yīng)該考慮這一點(diǎn)。
你是否應(yīng)該考慮從Jenkins中轉(zhuǎn)移出來(lái)?
如果你使用Jenkins一切都很順利,你對(duì)你的設(shè)置很有信心,同時(shí)擁有完全的控制權(quán),成本也不是問(wèn)題,我建議繼續(xù)使用Jenkins。
對(duì)于那些使用GitHub作為源碼控制平臺(tái),并且已經(jīng)覺(jué)得對(duì)自己的Jenkins設(shè)置沒(méi)有信心,尋求更好的替代方案的人來(lái)說(shuō),GitHub行動(dòng)將成為首要考慮的選擇。
由于GitHub Actions是由GitHub完全管理的服務(wù),因此您不需要知道如何擴(kuò)展和操作基礎(chǔ)設(shè)施來(lái)運(yùn)行它。
這是我選擇從Jenkins轉(zhuǎn)移出來(lái)的主要原因,在那里,我不能完全控制我的CI/CD管道發(fā)生了什么。
我不得不面對(duì)的一些挑戰(zhàn):
-
保持插件最新。
-
即使我沒(méi)有運(yùn)行任何構(gòu)建,我的單個(gè)Jenkins服務(wù)器構(gòu)建也要花錢(qián)。
-
在并發(fā)構(gòu)建等方面不一致
-
我不得不依賴幾個(gè)插件,這些插件會(huì)出現(xiàn)更新,我需要時(shí)常處理。
我知道有Jenkins的解決方案可以解決其中的一些問(wèn)題,但我已經(jīng)受夠了,并轉(zhuǎn)向了托管平臺(tái)。
我希望我已經(jīng)樹(shù)立了正確的心態(tài),如果你適用于GitHub Actions,那么就可以轉(zhuǎn)到GitHub Actions。讓我們看看GitHub Actions提供的功能來(lái)考慮這一舉措。
易于設(shè)置——全部由GitHub管理
我認(rèn)為,GitHub Actions在Jenkins之上的首要優(yōu)勢(shì)是在GitHub Actions上的設(shè)置簡(jiǎn)便性。GitHub Actions在云端運(yùn)行,你也可以選擇在本地運(yùn)行,這就是所謂的運(yùn)行器。相反,Jenkins沒(méi)有提供官方的管理服務(wù)。
而且我可能不會(huì)去選擇任何第三方的Jenkin托管產(chǎn)品。我覺(jué)得把對(duì)源代碼和敏感信息的訪問(wèn)權(quán)交給第三方供應(yīng)商風(fēng)險(xiǎn)太大。
由于這個(gè)原因,Jenkins服務(wù)器需要安裝,而GitHub Actions不需要。因此,在GitHub Actions中,設(shè)置過(guò)程就方便多了。此外,GitHub Actions是一系列的docker運(yùn)行。它僅需要 docker build
和 docker run
,這使得運(yùn)行和調(diào)試非常容易。
與GitHub緊密集成——無(wú)縫體驗(yàn)
最初,Jenkins似乎比GitHub Actions更靈活。Jenkins主要基于帳戶和觸發(fā)器,并以構(gòu)建為中心。這些不符合GitHub events。與此相反,GitHub的actions涵蓋范圍很廣。因此,每個(gè)GitHub events都有一個(gè)GitHub Action。
GitHub Actions支持多種語(yǔ)言和框架,它們也使用YAML編寫(xiě)。因此,它們可以像代碼一樣進(jìn)行編輯,重用,共享和forked。
它與GitHub的使用很直接,因?yàn)楫?dāng)你forke一個(gè)倉(cāng)庫(kù)時(shí),動(dòng)作會(huì)自動(dòng)被forke。
這讓你可以非常高效地測(cè)試和構(gòu)建項(xiàng)目,甚至可以在更接近開(kāi)發(fā)者的地方運(yùn)行項(xiàng)目。另外,您可以隨時(shí)訪問(wèn)GitHub API,從而使其在開(kāi)發(fā)人員中更受歡迎。
使用Bit(Github)時(shí),可以看到這種緊密集成的一種流行用例。Bit是一個(gè)工具和平臺(tái),它可以輕松地將JS組件(Node、React、Vue、Angular等)從任何資源庫(kù)共享到Bit的云服務(wù),并從那里共享到其他資源庫(kù)。
Bit的云服務(wù)可以自動(dòng)生成對(duì)所有Github倉(cāng)庫(kù)的拉取請(qǐng)求,這些倉(cāng)庫(kù)受一個(gè)共享組件的變更影響。這些自動(dòng)生成的PR可以作為Github Actions的觸發(fā)器。
這意味著,對(duì)一個(gè)單一(共享)組件的改變可以在所有使用它的資源庫(kù)中傳播,觸發(fā)CI,驗(yàn)證所有項(xiàng)目沒(méi)有被破壞。
GitHub Actions的另一大“特色”是,它們可以通過(guò)GitHub Marketplace相互分享。你可以重用其他開(kāi)發(fā)者編寫(xiě)的Action,這樣可以為你節(jié)省大量的時(shí)間,避免重寫(xiě)已有的代碼。
協(xié)調(diào)器和構(gòu)建節(jié)點(diǎn)——規(guī)?;瘶?gòu)建
GitHub Actions默認(rèn)遵循主從(協(xié)調(diào)者和構(gòu)建節(jié)點(diǎn))模式,而不是Jenkins為我們提供的順序管道。
然而,需要注意的是,類似的設(shè)置在Jenkins中也是可以實(shí)現(xiàn)的,但需要額外的努力和知識(shí)才能讓它運(yùn)行起來(lái)。
Jenkins | Github Actions |
---|---|
服務(wù)器需要安裝 | 無(wú)需安裝,因?yàn)樗窃谠贫?/td> |
任務(wù)或工作將是同步的,這將消耗更多的時(shí)間將產(chǎn)品部署到市場(chǎng)上 | 實(shí)現(xiàn)了異步CI/CD |
基于賬戶和觸發(fā)器,以不符合Github事件的構(gòu)建為中心 | 為每個(gè)Github事件提供動(dòng)作,支持多種語(yǔ)言和框架 |
需要在Docker鏡像上運(yùn)行,以保證環(huán)境的兼容性 | 適用于任何環(huán)境 |
有支持緩存機(jī)制的插件 | 如果你需要緩存,必須自己寫(xiě)緩存機(jī)制 |
不具備共享的能力 | 可以通過(guò)Github Marketpalce分享 |
如果你使用Jenkins,默認(rèn)設(shè)置將同步運(yùn)行部署管道中的每一步。例如,如果你需要運(yùn)行單元測(cè)試、集成測(cè)試和一些Sonar驗(yàn)證,它們必須在一個(gè)服務(wù)器環(huán)境中運(yùn)行。根據(jù)服務(wù)器中的可用資源,這可能會(huì)延遲執(zhí)行。此外,您無(wú)需付出額外的努力來(lái)使管道可靠。
通過(guò)使用GitHub Actions,這些工作可以并行化,如上圖所示,例如,工作1可以是單元測(cè)試和集成測(cè)試,工作2可以是Sonar驗(yàn)證。
總結(jié)
就其優(yōu)勢(shì)而言,我們認(rèn)真地研究了GitHub Actions領(lǐng)先于Jenkins的幾個(gè)領(lǐng)域。此外,GitHub Actions的增長(zhǎng)速度比Jenkins快,成千上萬(wàn)的GitHub Actions被發(fā)布到GitHub marketplace。圍繞這個(gè)社區(qū)也在不斷完善,其中有專門(mén)的GitHub Actions的倉(cāng)庫(kù)。這意味著什么?
但是,是否在項(xiàng)目中使用GitHub Actions或Jenkins取決于您。目前,GitHub Actions對(duì)于公共倉(cāng)庫(kù)是免費(fèi)使用的。對(duì)于私有倉(cāng)庫(kù),它具有按需付費(fèi)的機(jī)制。
我希望你已經(jīng)意識(shí)到GitHub Actions是比Jenkins更有優(yōu)勢(shì)的選擇,主要是因?yàn)樗撵`活性。對(duì)于那些開(kāi)始新項(xiàng)目或使用GitHub作為他們的源碼控制平臺(tái)的人來(lái)說(shuō),轉(zhuǎn)向GitHub Actions是個(gè)不錯(cuò)的選擇。
首先,GitHub文檔提供了具體的實(shí)現(xiàn)步驟,GitHub Actions的工作流語(yǔ)法可以在這里找到。