Jenkins X的“前世今生”
譯文【51CTO.com快譯】Jenkins X是一個開源項目,它為Kubernetes上的各種云原生應(yīng)用提供了自動化的CI/CD。自從云原生基金會(https://cd.foundation/projects/)去年發(fā)布了Jenkins X以來,它在應(yīng)用實現(xiàn)上的創(chuàng)新,讓越來越多的開發(fā)人員愿意主動了解此項技術(shù)及其具體的功能。
Jenkins X能夠給開發(fā)人員帶來諸如:更快的軟件交付版本,更簡單的安裝與配置,以及隨著時間的推移,不斷增強的業(yè)務(wù)連續(xù)性等優(yōu)勢。
在本文中,我將總結(jié)并回答一些關(guān)于Jenkins X的最常見問題,以及它的各種重要特性與優(yōu)勢。
Jenkins X是什么?
CloudBees公司的杰出工程師、及Jenkins X的***設(shè)計師,James Strachan將Jenkins X定義為:針對Kubernetes原生應(yīng)用的一種開源式持續(xù)交付的方式,其用戶不必過于關(guān)注各種底層的架構(gòu)。Jenkins X支持包括Amazon、Azure、Google、IBM Cloud、OpenShift、以及Pivotal等主流云平臺。作為Jenkins的一個子項目,Jenkins X通過自動化、工具化和DevOps的***實踐,提高了開發(fā)的速度,并改進了CI/CD。
有了Jenkins X,我們便可以輕松快捷地使用Kubernetes來配置復(fù)雜的生態(tài)系統(tǒng)。它不但在系統(tǒng)內(nèi)部減少了操作的復(fù)雜性,還提供了簡單易學(xué)的對于工具的選擇方法(https://www.cloudbees.com/blog/business-value-jenkins-x-automating-continuous-everything-kubernetes)。因此,Jenkins X可以確保在項目啟動時,我們不必花費大量的時間去創(chuàng)建結(jié)構(gòu)、或收集所需的各種文件。如果您需要一個Kubernetes集群的話,那么就不必擔(dān)心相關(guān)的安裝與配置,所有的工具都能夠自動化地工作在該環(huán)境之中。事實上,您只需要在Jenkins X中輸入一條jx命令(請參見https://jenkins-x.io/commands/jx/),它就能創(chuàng)建出CD管道、Git存儲庫、以及設(shè)置好webhookes。
Jenkins和Jenkins X有什么區(qū)別?
不同于Jenkins,Jenkins X經(jīng)歷了重塑,能夠更好地與Docker以及Kubernetes協(xié)同工作。當(dāng)然,Jenkins和Jenkins X也有著密切的相關(guān)性,那些Jenkins X能夠?qū)崿F(xiàn)的功能,Jenkins通過使用各種插件與集成,也能完成。不過,Jenkins X在許多方面都進行了簡化。通過賦能,您可以使用Helm、Draft、Monocular、ChartMuseum、Nexus、以及Docker Registry等開源工具,來輕松地構(gòu)建云原生應(yīng)用。
具體說來,Jenkins X直接定義了各種過程,而Jenkins則需要去按需適應(yīng)各種過程。憑借著配置即代碼(Configuration-as-Code)的特性,Jenkins X采用了CLI和API優(yōu)先的方法,并包含了諸如Helm和Monocular等外部工具。然而,Jenkins采用的是UI優(yōu)先的方法。通過UI的配置,各項功能都是由內(nèi)部插件來驅(qū)動的。此外,Jenkins X的預(yù)覽環(huán)境能夠讓開發(fā)人員協(xié)同驗證各種變更,并集成到那些基于拉取請求(Pull Request)所創(chuàng)建的運行系統(tǒng)的代碼庫中。
Jenkins X由何而來?
近幾年來,軟件開發(fā)過程得到了徹底的變化與發(fā)展。通過使用DevOps,開發(fā)人員在應(yīng)用程序與配置管理方面的責(zé)任增強了許多。雖然DevOps的宗旨是提升開發(fā)的速度、降低宕機的時間風(fēng)險,但是從開發(fā)角色轉(zhuǎn)變?yōu)檫\營角色,對于開發(fā)人員來說并非總是一帆風(fēng)順。DevOps在被廣泛采用與接納的同時,也給各個行業(yè)帶來了如下變革:
微服務(wù)體系結(jié)構(gòu):雖然公共云、私有云和混合云的部署模式,已在業(yè)界廣為推行,但是對于應(yīng)用程序的部署、管理和更新,仍存在著尚未解決的問題。在此背景下,微服務(wù)架構(gòu)應(yīng)運而生。與單體應(yīng)用不同,基于微服務(wù)的應(yīng)用程序可以被部署到較小的、可獨立發(fā)布與擴容的主機上。如今,Amazon、eBay、PayPal和Netflix之類的大型企業(yè),都將應(yīng)用程序從單體模式(monolithic)遷到了微服務(wù)架構(gòu)中。
容器生態(tài)系統(tǒng):如今,提供操作系統(tǒng)虛擬化的容器,也被普遍地應(yīng)用到了解決與微服務(wù)相關(guān)的問題上。在同一臺主機里,由于我們能夠使用具有不同技術(shù)與框架的容器,來部署和構(gòu)建不同的微服務(wù)。因此開發(fā)人員既可以使用他們所熟悉的編程語言,又能夠在容器的內(nèi)部封裝各種依賴關(guān)系。同時,容器也會比僅做硬件虛擬化的虛機(VM)更加高效。而能夠移動容器的Docker,在其Dockerhub的公共存儲庫中擁有著預(yù)先配置好的各種Docker鏡像,它們可供各大開源社區(qū)廣泛地使用。這些優(yōu)勢都使得容器成為了云端代碼部署的默認選擇。
Kubernetes的崛起:當(dāng)然,容器在管理和編排事務(wù)方面卻面臨著與VM相似的挑戰(zhàn)。對于任何組織來說,為了合理地利用好從云服務(wù)商處購置來的內(nèi)存、CPU或存儲空間,他們需要具有自動化移動容器的能力,進而提升效率并優(yōu)化各種操作。Google就是通過Kubernetes這種開源的解決方案,簡化了容器的安裝、升級和編排。與其他云服務(wù)商的容器協(xié)調(diào)方案相比,Kubernetes提供了一個通用的平臺,能夠處理所有類型的云服務(wù),甚至是一些內(nèi)部基礎(chǔ)架構(gòu)的容器。
然而,上述工具往往是針對某個特定問題的一小部分所構(gòu)建的。因此,面對各種玲瑯滿目的生態(tài)系統(tǒng),開發(fā)人員經(jīng)常無法選擇出最適合自己的CI/CD工具。他們往往需要將時間花費在了解、甚至是調(diào)整自己的CI/CD設(shè)置上,而不是真正的開發(fā)之中??梢姡麄兛释幸环N直截了當(dāng)?shù)姆椒?,來管理Kubernetes集群,并對生產(chǎn)環(huán)境中的Kubernetes進行有效的監(jiān)控。
話說回來,雖然Jenkins可以幫助開發(fā)人員充分地利用Kubernetes的CI/CD設(shè)置,但是在選擇真正能夠與代碼協(xié)同工作的插件組合、及其配置方面可并不輕松。因此,很少有開發(fā)者會認為:建立Jenkins管道是在Kubernetes上實現(xiàn)CD的***實踐。
面對這些挑戰(zhàn),開源社區(qū)開始考慮通過改進Jenkins,來方便在云端自動化地實現(xiàn)Kubernetes的CI/CD,這便催生了Jenkins X項目(https://jenkins-x.io/)。
Jenkins X的主要特點是什么?
遵循DevOps***實踐的Jenkins X是為開發(fā)人員所創(chuàng)建的,它旨在加快代碼的轉(zhuǎn)化。它可以提供預(yù)覽的環(huán)境,簡化DevEx的集群創(chuàng)建,并能夠運行在不同云服務(wù)商的集群環(huán)境之中。使用Jenkins X的***優(yōu)點是:在無需對Kubernetes的內(nèi)部構(gòu)造深入了解的情況下,開發(fā)人員便可以立刻上手其生態(tài)系統(tǒng)。由于所有的組件都已經(jīng)在Git中被版本化了,因此如果需要通過定制安裝,以適應(yīng)特定的環(huán)境或工作流的話,我們可以對底層的Docker文件、Jenkins X管道、Jenkins文件、以及Helm圖表進行調(diào)整。下面是社區(qū)里經(jīng)常提及的Jenkins X的主要特征:
自動化CI/CD:Jenkins X提供了一整套jx命令行工具,允許用戶將Jenkins X安裝在現(xiàn)有的或全新的Kubernetes集群上,通過導(dǎo)入各個項目之中,進而最終引導(dǎo)到新的應(yīng)用里。此外,Jenkins X還能夠為各種項目自動地創(chuàng)建管道。
GitOps改進環(huán)境:Jenkins X允許用戶使用Kubernetes的命名空間,來創(chuàng)建不同的虛擬環(huán)境,以用于研發(fā)、后續(xù)階段、以及產(chǎn)品之中。每一種環(huán)境都能夠獲取到特定的配置、應(yīng)用版本化的列表、以及存儲在Git庫里的配置。在這些環(huán)境之間,應(yīng)用對于新版本的promotion(對Git環(huán)境產(chǎn)生拉取請求),能夠通過遵循GitOps的各種實踐(https://www.cloudbees.com/blog/gitops-dev-dash-ops),來自動完成。此外,開發(fā)人員也能夠手動將代碼從一個環(huán)境提交到另一個環(huán)境,并按需改變或配置新的環(huán)境。
預(yù)覽環(huán)境:雖然用戶可以手動創(chuàng)建預(yù)覽的環(huán)境,但是Jenkins X也會自動為每個拉取請求創(chuàng)建一個預(yù)覽環(huán)境。籍此,用戶可以在合并之前,就預(yù)覽到變更的效果。此外,為了方便預(yù)覽,Jenkins X還會為拉取請求添加一個帶有鏈接的注釋。
您可以通過鏈接,來了解更多有關(guān)Jenkins X的特點。
Jenkins X有哪5大優(yōu)勢?
易于設(shè)置:Jenkins X為不同類型的項目提供構(gòu)建包、自動化安裝、以及用于配置和升級的外部工具(包括:Helm、Skaffold和Monocular等)。開發(fā)人員不但能夠通過單行的jx命令實現(xiàn)快速啟動,而且可以按需掌握Jenkins X的內(nèi)部管道狀態(tài)。
隔離性:無論是在共享的集群中,還是在相互獨立的集群里,每個團隊都能夠運行自己的Jenkins X實例。其中,在共享的集群中,每個團隊不但可以擁有自己的命名空間、能有效地共享資源,而且擁有與其他團隊不同的管道、數(shù)據(jù)流和配置。而在單獨的集群里,每個團隊都能得到自己的一組資源,完全不會受到其他團隊工作流的影響。
更快速度:為了加速開發(fā)的進程,Jenkins X提供了強大的命令集來提速各項任務(wù),并提供了與云端或SCM的無縫集成。例如:我們可以使用“jx create cluster gke”這一簡單的命令,在Google云上安裝Jenkins X。如果將參數(shù)改為eks則適用于AWS。同理,在Azure中可以使用aks、而Oracle里則可使用oke。此外,各種應(yīng)用程序的代碼、以及與容器、包、管道的配套文件,都可以被存儲在一個公共的庫中,開發(fā)人員開箱即用(out of the box)便可。
更快恢復(fù):GitOps創(chuàng)建了單一的“真相”源,以保證每一次拉取請求都能夠得到代碼所對應(yīng)的版本與注釋。通過Jenkins X和用戶環(huán)境中的配置即代碼,開發(fā)人員能夠獲取正確的上下文、和可追蹤的信息,進而更快地解決各種中斷問題。
可預(yù)測版本:Jenkins X通過“jx create devpod”命令,來創(chuàng)建各種開發(fā)與測試環(huán)境,以便開發(fā)人員在Jenkins X集群中獲取自己的沙箱。由于開發(fā)構(gòu)建環(huán)境中的pod與生產(chǎn)環(huán)境中管道里的pod相同,因此,它能夠確保代碼以一種可預(yù)測的方式被執(zhí)行。此外,在代碼被提交到生產(chǎn)環(huán)境之前,Jenkins X還有利于預(yù)覽環(huán)境的spin up??偟恼f來,所有這些特性都有助于開發(fā)人員交付出穩(wěn)定的程序代碼。
原文標(biāo)題:All You Need to Know About Jenkins X,作者:Parker Ennis
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】