本文首發於:Jenkins 中文社區git
原文連接 做者:Juan Ignacio Girogithub
譯者:幸福街10號服務器
Jenkins 是一個功能強大的自動化和 CI/CD 工具,能夠成爲 Kubernetes 流水線的重要組成部分markdown
有幾種方法能夠在 DevOps 環境中管理您的雲基礎架構。 DevOps 是一種鼓勵快速流動的應用程序開發以及促進 IT 團隊開發、測試、發佈過程無縫無縫銜接的方法。架構
Jenkins 經過自動化將持續集成(CI)和持續交付(CD)無縫集成到開發流程中來優化工做流程。微服務
可使用 Kubernetes 中的 Jenkins pod 部署這些技術, Jenkins pod 能夠根據團隊的具體需求進行擴展。工具
Jenkins 是 CI/CD 的同義詞,它是自動化開發、部署應用程序和微服務的完美工具,目前是市場上最流行的自動化工具。 Jenkins 擁有1000多個插件,能夠輕鬆地與其餘系統(包括 Kubernetes )集成。插件不只提供多系統集成,並且顯著加強了 Jenkins 的能力,使 Jenkins 可以幫助您構建和部署幾乎任何類型的項目。咱們在另外一篇文章中介紹了生活中最須要的20個 Jenkins 插件。oop
因爲 Jenkins 和 Kubernetes 的原生兼容性,設置本身的 CI/CD 流水線很是容易。與基於 VM 的部署相比,在 Kubernetes 上部署 Jenkins 優點更明顯。例如,得到按需擁有特定於 Jenkins slaves (代理)項目的能力,而不是讓一個 vm 池空閒等待任務。它將使用 master-agent 體系結構來徹底自動化微服務的建立和部署以及測試和部署所需的環境。測試
可使用 Helm、kubectl 或 GUIs 部署 Jenkins ,以便將新的 pods 部署到集羣中。安裝後,下一步是爲 K8s 配置 Jenkins 插件。咱們須要配置系統設置,例如,代理在哪裏找到 Jenkins master ,代理將使用的 Docker 鏡像等。固然,將 Jenkins 配置爲與 CI/CD 工做流一塊兒工做也是相當重要的,包括設置測試和部署參數以及要如何設置 Jenkins 控制的集羣。一旦 Jenkins 啓動並運行,就能夠實現一個徹底自動化的連續交付環境。優化
讓 Jenkins 啓動只是一個開始,下一步是在 Jenkins 內配置 CI/CD 流水線。 你能夠先運行 minikube service Jenkins
,而後使用其 Web UI 訪問 Jenkins。
而後,您能夠選擇安裝必要的插件。 根據您要建立的流水線,您可能須要下載並安裝合適的插件,以實現流水線自動化以及更好的管理。必須使用 Kubernetes 插件。
另外一個值得討論的插件是 Kubernetes Continuous Deploy 插件,它專門爲處理流水線的持續交付設計的。 該插件將處理爲測試建立新的 pods 以及測試和部署之間的轉換。
配置完全部插件後,從新啓動 Jenkins。 Jenkins 提供的一個很好的功能可以自動執行這些手動更改,所以下次您配置 CI/CD 系統(例如,在基礎結構遷移的狀況下)時,沒必要再次經過手動更改。 您只需接收一個具備與之前相同配置和插件的實例。嵌入到 Jenkins Docker 鏡像和 Jenkins 配置文件 config.xml 中的腳本 install_plugins.sh 實現了這一功能。
如今,您能夠繼續建立您的第一個流水線,爲它分配憑據,並開始在流水線內部進行開發。記住, Jenkins 並不老是從本地存儲中提取代碼;您須要在第一次配置時手動發出推送請求。
建立第一個流水線,而後您能夠經過優化 minikube 當即運行新應用程序。在大多數 CI/CD 工做流中,手動推送請求實際上很方便,由於如今您能夠經過流水線更好地控制想要推送的代碼。
當您打開應用程序代碼並對其進行更改時, Jenkins 不會當即更新部署包。相反,您必須提交更改並等待 Jenkins 提取這些更改(取決於代碼簽出的配置方式),而後才能執行其餘操做。
在 Jenkins 用戶界面上,有一個 Build now 命令用於運行新的構建。構建完成後,下次使用 Minikube 運行應用程序時,您將看到所作的更改。 Jenkins 流水線的配置方式使該工具很是有用。
例如,您可使用 Jenkins 來支持多團隊開發。 Jenkins 流水線做爲代碼運行,這意味着具備正確憑據的任何用戶均可以提交更改並執行流水線中內置的流程。
它也很是通用。 若是服務器忽然崩潰,流水線及其中的進程將自動恢復。 Jenkins 永遠不會失去對它管理的集羣的控制權,所以您可使用 Jenkins徹底消除對 CI / CD 環境的手動配置的須要。
我我的最喜歡的是 Jenkins 管理多個流水線的方式,管理員能夠清楚地查看系統中的全部流水線。再加上暫停和恢復流水線的能力,管理微服務和大型項目的開發使用 Jenkins 很是有幫助。
另外的偉大的插件是流水線和多分支流水線,它幫助咱們可視化 CI/CD 流。它容許在 repo 中定義一個 jenkins 文件,包括咱們但願 jenkins 執行的全部步驟。不須要從 GUI 進行手動配置(可能只保留給管理員),而且容許開發人員靈活地控制給定項目/分支的流程。因爲它在 Github 中,所以它也能夠與任何其餘應用程序庫一塊兒進行版本控制。
讓咱們回到咱們的主要觀點:在 Kubernetes 上使用 Jenkins 。從 Jenkins 工具的工做方式來看,很容易看出這種自動化度量如何完美地補充了 Kubernetes 。一旦配置了插件,每次觸發新的構建/任務, Jenkins 都會在 K8s 中建立一個 Pod (經過設計用於執行該工做的按需代理)。一旦完成, Pod 將被銷燬,從而避免了有固定的代理池等待任務執行的須要。如您所見, Kubernetes 爲每一個開發團隊提供了強大的 CI/CD 基礎架構,而 Jenkins 則大大簡化了對該環境的管理。
這種組合可以在不一樣的狀況下改進 CI/CD 工做流,包括在更大的開發項目中。若是你考慮到大量 Jenkins 插件的可用性,包括 Kubernetes 流水線、憑據以及目前已經可用的更多插件,您就會知道您有一個強大的 CI/CD 工具可使用。甚至有能力將流水線中的非安裝工做和材料工做分開;沒道理不愛它?
這篇文章最初發表在這裏。