JenkinsX介紹

一、創(chuàng)立背景

Jenkins一直以來都是DevOps工具鏈的重要組成部分,然而在持續(xù)的高增長(zhǎng)和巨大成功的背后,也逐漸暴露出一些痛點(diǎn),,比如Master的單點(diǎn)故障、版本升級(jí)帶來的插件版本不匹配等問題。

另外,微服務(wù)和云原生應(yīng)用解決方案日臻成熟,應(yīng)用架構(gòu)的細(xì)分和服務(wù)間的解耦,使得服務(wù)有了獨(dú)立發(fā)布的能力。在云原生時(shí)代,微服務(wù)架構(gòu)下的持續(xù)集成和持續(xù)交付需求,也渴望著更加靈活的解決方案。

目前Kubernetes儼然成為容器編排領(lǐng)域的領(lǐng)導(dǎo)者,利用Kubernetes完成CI/CD已經(jīng)成為大勢(shì)所趨,但Jenkins在與代碼協(xié)同工作及其配置方面并不輕松。因此,很少有開發(fā)者認(rèn)為:建立Jenkins管道是在Kubernetes上實(shí)現(xiàn)CD的最佳實(shí)踐。

面對(duì)以上挑戰(zhàn),開源社區(qū)開始考慮通過改進(jìn)Jenkins,來方便在云端自動(dòng)化地實(shí)現(xiàn)Kubernetes的CI/CD,這便催生了Jenkins X。

二、Jenkins X是什么?

Jenkins X 是基于 Kubernetes 的CI&CD平臺(tái),使用GO語言開發(fā),作為Jenkins的一個(gè)子項(xiàng)目,通過自動(dòng)化、工具化和DevOps的最佳實(shí)踐,以解決微服務(wù)架構(gòu)下云原生應(yīng)用的持續(xù)交付的問題,簡(jiǎn)化和加速整個(gè)云原生應(yīng)用的開發(fā)、運(yùn)行和部署過程,從而改善了研發(fā)過程中的復(fù)雜環(huán)節(jié),讓研發(fā)可以專注于價(jià)值創(chuàng)造,其他的事情通通交由Jenkins X來解決,開發(fā)人員開箱即用便可。

Jenkins X 設(shè)計(jì)之初采用原生的Jenkins作為流水線持續(xù)交付引擎,但在2020年4月選擇Tekton作為默認(rèn)執(zhí)行引擎,2021年4月發(fā)布Jenkins X 3.x GA版本,支持將Jenkinsfile自動(dòng)轉(zhuǎn)換為Tekton Pipepline的step運(yùn)行,有相關(guān)插件支持將Jenkinsfile轉(zhuǎn)換為Tekton Pipepline。

三、JenkinsX和Jenkins 異同點(diǎn)

1、相對(duì)于Jenkins,Jenkins X能夠更好地與Docker以及Kubernetes協(xié)同工作。Jenkins X結(jié)合各種開源工具,輕松地構(gòu)建云原生應(yīng)用。

2、Jenkins X直接定義各種過程,而Jenkins則需要去按需適應(yīng)各種過程。Jenkins X能實(shí)現(xiàn)的功能,Jenkins通過各種插件與集成,也能完成。

3、Jenkins X采用CLI和API優(yōu)先的方法,Jenkins采用的是UI優(yōu)先的方法。通過UI的配置,各項(xiàng)功能都是由內(nèi)部插件來驅(qū)動(dòng)的。

4、Jenkins X預(yù)覽環(huán)境能夠讓開發(fā)人員協(xié)同驗(yàn)證各種變更,并集成到那些基于拉取請(qǐng)求(Pull Request)所創(chuàng)建的運(yùn)行系統(tǒng)的代碼庫(kù)中。

四、Jenkins X架構(gòu)

Jenkins X 基于松耦合架構(gòu)的 DevOps 模型,被設(shè)計(jì)用來支持在多個(gè)團(tuán)隊(duì)間,部署大量可重復(fù)、可管理的分布式微服務(wù)。在Jenkins X的設(shè)計(jì)中,整合了Helm,Draft,GitOps,以及Nexus,chartmuseum,monocular等諸多新系統(tǒng)和工具,從而實(shí)現(xiàn)自動(dòng)構(gòu)建編譯環(huán)境,生成容器鏡像,流水線,自動(dòng)化部署,并通過簡(jiǎn)單的Review實(shí)現(xiàn)不同環(huán)境間的自動(dòng)發(fā)布。

1完美封裝的命令行工具

Jenkins X 帶來了一個(gè)方便使用的命令行工具 jx :

· 安裝 Jenkins X 到已經(jīng)存在的 Kubernetes 集群

· 創(chuàng)建一個(gè)新的 kubernetes 集群 并安裝Jenkins X

· 導(dǎo)入項(xiàng)目到Jenkins X 中以及他們的持續(xù)部署流水線設(shè)置

· 創(chuàng)建新的Spring Boot應(yīng)用 并導(dǎo)入Jenkins X 中,以及他們的持續(xù)部署流水線設(shè)置

2自動(dòng)化流水線

· 選擇項(xiàng)目類型自動(dòng)生成Jenkinsfile定義流水線

· 自動(dòng)生成Dockerfile并打包容器鏡像

· 自動(dòng)創(chuàng)建Helm Chart并運(yùn)行在Kubernetes集群

· 自動(dòng)關(guān)聯(lián)代碼庫(kù)和流水線,作為代碼變更自動(dòng)觸發(fā)(基于Webhook實(shí)現(xiàn))

· 自動(dòng)版本號(hào)自動(dòng)歸檔

3基于GitOps的部署升級(jí)

· 所有的環(huán)境,應(yīng)用列表,版本,配置信息統(tǒng)一放在代碼庫(kù)中進(jìn)行版本控制

· 通過Pull Request實(shí)現(xiàn)研發(fā)和運(yùn)維的協(xié)同,完成應(yīng)用部署升級(jí)(Promotion)

· 可自動(dòng)部署和手動(dòng)部署,在必要的時(shí)候增加手工Review

· 當(dāng)然這些都封裝在jx命令中實(shí)現(xiàn)

五、Jenkins X 的核心組件

1、Helm

Helm是用于管理Kubernetes資源對(duì)象的工具,類似APT,YUM和HOMEBREW,通過將Kubernetes的資源對(duì)象打包成Chart的形式,完成復(fù)雜應(yīng)用的部署和版本控制,是目前業(yè)界流行的解決方案。

2、Draft

Draft是自動(dòng)化應(yīng)用構(gòu)建并使之運(yùn)行在Kubernetes上面的工具,具有語言識(shí)別能力,能夠自動(dòng)生成構(gòu)建腳本,依賴,環(huán)境并打包成docker鏡像并部署在Kubernetes集群上,加快代碼開發(fā)節(jié)奏,而無需關(guān)心基礎(chǔ)設(shè)施層面的技術(shù)實(shí)現(xiàn)。

3、GitOps

GitOps是weaveworks基于自己多年Kubernetes實(shí)踐推出的應(yīng)用部署解決方案,它將Git作為整個(gè)應(yīng)用部署的單一可信數(shù)據(jù)源(SSOT),通過類似代碼開發(fā)的Pull Request流程完成應(yīng)用部署的Review和自動(dòng)化實(shí)現(xiàn),并且將部署配置信息納入版本控制。

六、Jenkins X有哪些優(yōu)勢(shì)?

1、易于設(shè)置:Jenkins X為不同類型的項(xiàng)目提供構(gòu)建包、自動(dòng)化安裝、以及用于配置和升級(jí)的外部工具。開發(fā)人員不但能夠通過單行的jx命令實(shí)現(xiàn)快速啟動(dòng),而且可以按需掌握J(rèn)enkins X的內(nèi)部管道狀態(tài)。

2、隔離性:無論是在共享的集群中,還是在相互獨(dú)立的集群里,每個(gè)團(tuán)隊(duì)都能夠運(yùn)行自己的Jenkins X實(shí)例。其中,在共享的集群中,每個(gè)團(tuán)隊(duì)不但可以擁有自己的命名空間、能有效地共享資源,而且擁有與其他團(tuán)隊(duì)不同的管道、數(shù)據(jù)流和配置。而在單獨(dú)的集群里,每個(gè)團(tuán)隊(duì)都能得到自己的一組資源,完全不會(huì)受到其他團(tuán)隊(duì)工作流的影響。

3、更快速度:為了加速開發(fā)的進(jìn)程,Jenkins X提供了強(qiáng)大的命令集來提速各項(xiàng)任務(wù),并提供了與云端或SCM的無縫集成。例如:我們可以使用“jx create cluster gke”這一簡(jiǎn)單的命令,在Google云上安裝Jenkins X。

4、更快恢復(fù):GitOps創(chuàng)建了單一的“真相”源,以保證每一次拉取請(qǐng)求都能夠得到代碼所對(duì)應(yīng)的版本與注釋。通過Jenkins X和用戶環(huán)境中的配置即代碼,開發(fā)人員能夠獲取正確的上下文、和可追蹤的信息,進(jìn)而更快地解決各種中斷問題。

5、可預(yù)測(cè)版本:Jenkins X通過“jx create devpod”命令,來創(chuàng)建各種開發(fā)與測(cè)試環(huán)境,以便開發(fā)人員在Jenkins X集群中獲取自己的沙箱。由于開發(fā)構(gòu)建環(huán)境中的pod與生產(chǎn)環(huán)境中管道里的pod相同,因此,它能夠確保代碼以一種可預(yù)測(cè)的方式被執(zhí)行。此外,在代碼被提交到生產(chǎn)環(huán)境之前,Jenkins X還有利于預(yù)覽環(huán)境的spin up。總的說來,所有這些特性都有助于開發(fā)人員交付出穩(wěn)定的程序代碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容