Jenkins X不是Jenkins,它是徹底從頭開始重寫的。 git
Jenkins X比Jenkins更聚焦於特定領域。它提供了一種使用特定工具(Kubernetes Helm Tekton Skaffold Flagger…)來構建和部署應用程序的方式。若是您喜歡這樣使用它,那將是一種享受,若是您不喜歡,那麼另外一種工具更適合。github
本文將爲您講述Jenkins X架構。咱們將首先描述k8s 原生和CRD,這將有助於咱們瞭解Tekton的工做原理和做用。而後咱們來看看Jenkins X,它如何在後臺使用Tekton,以及爲何。服務器
Jenkins很老,開發語言爲Java,體積龐大,一般很難配置。儘管它很是靈活,可擴展,而且多是使用最普遍的CI和CD工具。 Jenkins X可否青出於藍而勝於藍?架構
咱們正處於軟件程序和運行它們所需的基礎結構融合在一塊兒的時代。隨着Kubernetes的興起,一種通用語言得以建立,它能夠描述現代基礎設施。less
Kubernetes爲建立基礎架構時的常見問題提供瞭解決方案,例如按期運行容器,讓容器進行通訊,收集日誌/事件以及附加捲。微服務
Kubernetes中的CRD提供了一種擴展API的方法。在羣集中安裝CRD時,可使用新的資源類型。隨同新的資源類型一塊兒提供了自定義控制器,該控制器在控制器管理器中運行並處理新資源類型的生命週期。工具
上圖顯示了k8s Deployment Controller管理部署,以及經過引入的CRD的MyShiny Controller管理MyShiny資源。將CRD安裝在羣集中後,用戶能夠像使用kubectl或API同樣與其餘資源正常交互。ui
Kubernetes原生應用程序直接在Kubernetes之上開發。他們使用k8s API併爲其工做流程定義CRD。就像您可使用Windows API/SDK爲Windows開發應用程序同樣,您也能夠對Kubernetes執行相同的操做。spa
Jenkins X是Kubernetes原生的一個例子,咱們將在本文中進行探討並說明緣由。日誌
「Tekton用於CI/CD,就像Kubernetes用於基礎架構同樣」。這意味着它爲持續集成和持續部署/交付的常見問題提供了通用解決方案。它經過提供新資源(如經過CRD的task或pipeline)來實現:
Task是您要在連續集成流程中運行的連續步驟的集合。Task將在集羣中的pod內運行。
若是您查看上面的示例,將會發現與Pod的類似之處。每一個步驟都使用特定的鏡像執行。步驟能夠像普通pod容器同樣經過卷共享數據。
Pipeline定義了一組要執行的任務。
在此示例中,咱們建立了一個新pipeline,執行一個名爲build-push的task。能夠將參數傳遞給pipeline和task。
簡短介紹了Tekton如何建立Kubernetes CRD來解決常見的CI/CD問題。這樣,各類不一樣的CI/CD工具就能夠利用這一共同點來構建其特定功能。
Tekton不能直接使用,而是能夠經過其餘工具(例如Jenkins X)直接使用。Tekton能夠成爲處理Kubernetes中CI/CD的事實上的標準低層。
在最新版本(從2.0版開始)中,Jenkins X是Golang的完整版本,與經典Jenkins沒有任何共同之處。除其餘技術外,它還使用Tekton在Kubernetes上管理和執行pipeline和做業。如今,咱們深刻探討其一些概念:
Jenkins X首先是GitOps,這意味着它掛接到Git Webhooks中,並在提交或合併請求時被激活。 Jenkins X將要求每一個應用程序/微服務都有本身的Git存儲庫。
並且,每一個生產/預發佈等環境都將擁有本身的Git存儲庫。到環境中的每一個部署都將經過(自動建立)拉取請求完成。
Jenkins X安裝及其全部配置(經過jx boot安裝)也將駐留在其本身的Git存儲庫中。這樣,將對應用程序,基礎架構或配置進行全部更改,並將其存儲在Git中。
關於Jenkins X,無服務器意味着沒有一直在運行的Jenkins服務器。在Kubernetes控制平面中運行的Tekton CRD控制器正在等待Git事件,而後建立處理pipeline所需的Pod。在Jenkins X中運行的每一個pipeline均由Tekton管理。無需手動處理。
可是,若是沒有pipeline在運行,也不要期望集羣徹底是空的:
對於每一個pipeline運行,都會建立一個新的Pod。所以,可伸縮性僅受Kubernetes集羣資源或命名空間配額的限制。
是的,最後是pipeline的YAML配置:
https://github.com/jenkins-x/jx/blob/e7060d9d599f01465ca2d064a505e0e5e09a9e15/jenkins-x.yml
Jenkins X甚至能夠徹底不使用任何Jenkinsfile導入(jx導入)項目。它將建立默認pipeline,甚至建立默認的Dockerfile(若是不存在)。它包含適用於許多常見項目類型和語言(例如Python/JS/Go/Java)的構建包。
在不從新考慮工做流程的狀況下,您將沒法輕鬆使用或轉換舊的Jenkins pipeline。若是您想研究轉換,能夠檢查一下Jenkinsfile轉換示例。從經典Jenkins切換到Jenkins X可能意味着您必須調整CI/CD工做流程。
Jenkins X容許爲每一個提交或合併請求自動建立預覽環境。預覽環境的URL做爲對合並請求的註釋發佈。只要不合並Pull Request,預覽環境就將存在,並在Kubernetes集羣環境中做爲單獨的命名空間實現。
Jenkins X根本不是Jenkins。讓咱們給它起一個名字,咱們稱它爲... Klaus。嚴格意義上說,Jenkins X和Jenkins並無多大關係。
Classic Jenkins是可用於全部事物的多配置和可擴展工具。 Jenkins X專門用於特定目的:在Kubernetes上運行的微服務架構。
當我開始使用Jenkins X時,我當即以爲它對我有太多幫助。我能夠逐步進行配置。使用Jenkins X,您必須禁用不少而不是啓用。但最後,您應該讓步,接受工做流程並感到高興。
所以,我深刻研究了Jenkins X,我認爲它很是簡潔,確實提供了巨大的優點,而且消除了不少重複的工做。我將繼續,並但願很快將其用於生產中。若是您是Kubernetes愛好者,那麼絕對感受像CI/CD的將來。
也許今天咱們再也不須要像經典Jenkins這樣的大型多功能工具。咱們可以比以往更快地開發專用應用程序。咱們但願使用小型工具/微服務來解決使用。