Jenkins X:基于Kubernetes的CI/CD平台
背景
Jenkins自動化服務(wù)器一直都是DevOps工具鏈的重要組成部分,并且已發(fā)展成為開源持續(xù)集成和持續(xù)部署(CI&CD)軟件的領(lǐng)導(dǎo)者。據(jù)不完全統(tǒng)計,截至2019年6月,已有將近26萬的Jenkins服務(wù)器以及超過2900萬的Jenkins任務(wù)在全世界范圍內(nèi)運(yùn)行著,而其持續(xù)保持的高增長速度更是令人感到無比驚艷。然而,Jenkins在取得巨大成功的背后,也逐漸暴露出一些痛點(diǎn):
- Jenkins服務(wù)器的單點(diǎn)故障問題,特別是任何宕機(jī)維護(hù)操作都可能導(dǎo)致git webhook事件的丟失;
- Jenkins服務(wù)經(jīng)常會將磁盤占滿,需要腳本或者人工清理才能使服務(wù)繼續(xù)運(yùn)行;
- Jenkins版本升級帶來的插件版本不匹配等。
Jenkins Active Installations
(數(shù)據(jù)來源: https://stats.jenkins.io/)
在Jenkins高速發(fā)展的同時,云計算和容器技術(shù)的發(fā)展也不斷重塑著云時代的基礎(chǔ)設(shè)施,軟件架構(gòu),部署發(fā)布,研發(fā)過程和組織文化:Kubernetes在容器編排領(lǐng)域的一枝獨(dú)秀,微服務(wù)和云原生應(yīng)用解決方案也日臻成熟,應(yīng)用架構(gòu)的細(xì)分和服務(wù)間的解耦使得服務(wù)有了獨(dú)立發(fā)布的能力。在這個云原生時代,微服務(wù)架構(gòu)下的持續(xù)集成和持續(xù)交付需求也渴望著更加靈活的解決方案,于是Jenkins X應(yīng)運(yùn)而生。
Jenkins X是什么?
Jenkins X 是基于 Kubernetes 的CI&CD平臺,復(fù)用Jenkins自身的能力,以解決微服務(wù)架構(gòu)下云原生應(yīng)用的持續(xù)交付的問題,簡化整個云原生應(yīng)用的開發(fā)、運(yùn)行和部署過程。
所以Jenkins X = Jenkins + Kubernetes ?答案顯然是否定的,Jenkins X想要做的遠(yuǎn)非如此!
Jenkins X 其實是重新構(gòu)思了云原生時代下的研發(fā)工程師與 CI/CD的交互方式,依然采用原生的Jenkins作為流水線持續(xù)交付引擎,但是提供了一個良好封裝的接口命令行工具來完成與系統(tǒng)的交互。通過整合自動化工具,以落地DevOps最佳實踐,從而改善了研發(fā)過程中的復(fù)雜環(huán)節(jié),讓研發(fā)可以專注于價值創(chuàng)造,其他的事情通通交由Jenkins X來幫你解決,其設(shè)計理念深受DevOps年度報告和近來大熱的《Accelerate》一書的影響。《Accelerate》中總結(jié)了一組有助于實施 DevOps 的能力,Jenkins X實現(xiàn)了以下能力以幫助用戶以開箱即用的方式獲得被科學(xué)證實過的顯著收益。
Jenkins X架構(gòu)
Jenkins X 基于松耦合架構(gòu)的 DevOps 模型,被設(shè)計用來支持在多個團(tuán)隊間,部署大量可重復(fù)、可管理的分布式微服務(wù)。在Jenkins X的設(shè)計中,整合了Helm,Draft,GitOps,以及Nexus,chartmuseum,monocular等諸多新系統(tǒng)和工具,從而實現(xiàn)自動構(gòu)建編譯環(huán)境,生成容器鏡像,流水線,自動化部署,并通過簡單的Review實現(xiàn)不同環(huán)境間的自動發(fā)布。
Jenkins X 的新特性
1完美封裝的命令行工具
Jenkins X 帶來了一個方便使用的命令行工具 jx :
- 安裝 Jenkins X 到已經(jīng)存在的 Kubernetes 集群
- 創(chuàng)建一個新的 kubernetes 集群 并安裝Jenkins X
- 導(dǎo)入項目到Jenkins X 中以及他們的持續(xù)部署流水線設(shè)置
- 創(chuàng)建新的Spring Boot應(yīng)用 并導(dǎo)入Jenkins X 中,以及他們的持續(xù)部署流水線設(shè)置
2自動化流水線
- 選擇項目類型自動生成Jenkinsfile定義流水線
- 自動生成Dockerfile并打包容器鏡像
- 自動創(chuàng)建Helm Chart并運(yùn)行在Kubernetes集群
- 自動關(guān)聯(lián)代碼庫和流水線,作為代碼變更自動觸發(fā)(基于Webhook實現(xiàn))
- 自動版本號自動歸檔
3基于GitOps的部署升級
- 所有的環(huán)境,應(yīng)用列表,版本,配置信息統(tǒng)一放在代碼庫中進(jìn)行版本控制
- 通過Pull Request實現(xiàn)研發(fā)和運(yùn)維的協(xié)同,完成應(yīng)用部署升級(Promotion)
- 可自動部署和手動部署,在必要的時候增加手工Review
- 當(dāng)然這些都封裝在jx命令中實現(xiàn)
4預(yù)覽環(huán)境和信息同步反饋
- 預(yù)覽環(huán)境用于代碼Merge到主分支之前的臨時創(chuàng)建
- 同Pull Request工作流程集成并實現(xiàn)信息同步和有效通知
- 驗證完畢后自動清理
- 提交和應(yīng)用狀態(tài)自動同步到Github注釋
- 自動生成release notes信息供驗證
Jenkins X 的核心組件
Jenkins
Jenkins X并非全新的一個全新的Jenkins,它依然采用Jenkins 2.0作為持續(xù)交付的核心引擎,并且?guī)椭鶭enkins自身完成云原生應(yīng)用時代的轉(zhuǎn)型。
Helm
Helm是用于管理Kubernetes資源對象的工具,類似APT,YUM和HOMEBREW,通過將Kubernetes的資源對象打包成Chart的形式,完成復(fù)雜應(yīng)用的部署和版本控制,是目前業(yè)界流行的解決方案。
Draft
Draft是自動化應(yīng)用構(gòu)建并使之運(yùn)行在Kubernetes上面的工具,具有語言識別能力,能夠自動生成構(gòu)建腳本,依賴,環(huán)境并打包成docker鏡像并部署在Kubernetes集群上,加快代碼開發(fā)節(jié)奏,而無需關(guān)心基礎(chǔ)設(shè)施層面的技術(shù)實現(xiàn)。
GitOps
GitOps是weaveworks基于自己多年Kubernetes實踐推出的應(yīng)用部署解決方案,它將Git作為整個應(yīng)用部署的單一可信數(shù)據(jù)源(SSOT),通過類似代碼開發(fā)的Pull Request流程完成應(yīng)用部署的Review和自動化實現(xiàn),并且將部署配置信息納入版本控制。
Jenkins X 的安裝
1獲取JX
在一切工作開始之前,你需要在機(jī)器上安裝對應(yīng)的jx二進(jìn)制包。在MacOS上,可以使用brew:
2創(chuàng)建新的K8S集群
Jenkins X支持在主流公有云平臺(AWS, GKE, Azure)上創(chuàng)建新的Kubernetes集群,同時還支持minikube的local環(huán)境。
只需要通過命令“jx create cluster ”就可以完成集群的創(chuàng)建和Jenkins X的安裝。
如果想在已有的kubernetes集群中安裝Jenkins X,則可以直接使用“jx install”來完成。
參考資料:
https://jenkins-x.io/
https://github.com/Azure/draft https://helm.sh/
https://www.weave.works/technologies/gitops/
https://book.douban.com/subject
https://zhuanlan.zhihu.com/p/75348768
總結(jié)
以上是生活随笔為你收集整理的Jenkins X:基于Kubernetes的CI/CD平台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jenkins X基本概念:Jenkin
- 下一篇: Celery简介及Docker测试环境搭