使用Kubernetes-Jenkins實現CI/CD

店家小二發表於2018-12-15

Author: Ramit Surana DevOps Zone
DevOps Zone讓你成為Sonatype Nexus的合作伙伴,Nexus套件能幫助你擴充套件DevOps交付過程,持續的將元件智慧的整合到開發工具中,包括:Eclipse, IntelliJ, Jenkins, Bamboo, SonarQube等等,請看演示

關於持續整合和持續釋出,Martin Fowler給出了最好的定義:

“持續整合是一種軟體開發實踐,團隊成員可以頻繁的整合他們的工作,通常每個人一天至少一次整合甚至多次整合。每次整合都通過自動化構建和測試進行驗證,以儘快檢測整合錯誤。許多團隊發現,這種方法可以顯著減少整合的問題,並允許團隊更加快速的開發。”

簡介

本文將討論和探索兩個令人驚奇和相當有趣的技術。一個是Jenkins,一個流行的持續整合/釋出的工具,另一個是Kubernetes,一個流行的容器編排引擎。另外一個驚喜,我們發現了Fabric8——一個酷炫的微服務平臺。現在,讓我們開始吧!

警告:在下文的幾個步驟中,你的伺服器可能會中途掛起幾次,請選擇配置高的PC。

方法論

有很多方法,可以讓我們實現CI/CD,在本文中,我們重 點介紹Kubneretes-Jenkins外掛和Fabric8。

總體架構

在開始我們的工作之前,讓我們花一點時間分析開始使用Jenkins使用Kubernetes容器所需的工作流。Kubernetes對於開發者來說是一個驚人的開源容器編排引擎。Kubernetes是由Google發起的,這使Kubernetes在使用多個開源容器專案方面有一個驚人的優勢。預設情況下,Docker更受Kubernetes的使用者支援和青睞。使用Docker容器的工作流程如下圖所示:

20170320212433

與使用rkt容器(rktnetes)類似,如下圖:

20170320212443

目前,Jenkins還沒有支援RKT容器的外掛,但我認為工作流在其實現後也將保持不變。

Kubernetes-Jenkins外掛

在你的主機上安裝Kubernetes

在主機上安裝Kubernetes是一個容易的任務。如果你想在本地機器上試用它,我建議你試試Minikube,這裡有快速安裝指南:

  1. 確認你的kubectl已經安裝完成,參考文件
  2. 確認已經下載完依賴的元件,參考先決條件
  3. 下載、安裝Minikube

Carlossg在使用Jenkins和Kubernetes的方面做了驚人的工作,他為Jenkins建立了一個特棒Kubernetes外掛,使用這個外掛,你可以很容易地直接使用Kubernetes。此外,還為使用者提供了更容易的配置選項,他已經構建了一個包含Kubernetes外掛的Jenkins映象,映象可以在Docker Hub上找到。在接下來的步驟中,我們將從Docker Hub上獲取此映象,並建立一個卷/var/jenkins/_home用於儲存Jenkins的資料。

存在一個問題

雖然我們正在做我們計劃做的一切,我們仍然會遇到一個問題。 你會注意到,每當你要關閉它後,重新啟動你的Jenkins容器,所有的資料都會丟失。 無論你做了什麼,例如建立作業,安裝外掛等等,都會丟失。 這是容器的常見問題之一。 讓我們更深入地討論它。

關於資料容器的一個詞

當談到容器時,資料是一個棘手的概念。在所有時間保證資料安全、可用性方面容器並不是一個很好的例子。過去發生了許多事件,其中已經看到容器會丟失資料。有很多種辦法能解決這個問題,其中之一是使用Docker卷,我沒有發現使用持久卷的好處。另一個辦法是建立“資料容器”,並將其用作儲存資料的源,而不是僅僅依賴一個映象。
下圖簡單說明了我們使用“資料容器”來確保我們資料可用性的方法:

20170320212452

接下了的步驟是啟動Jenkins Kubernetes容器:

// Running jenkins using another container containing data
 $ docker run --volumes-from jenkins-k8s -p 8080:8080 -p 50000:50000 
 -v /var/jenkins_home csanchez/jenkins-kubernetes

// Created a container for containing jenkins data with // the image name csanchez/jenkins-kubernetes
 $ docker create --name jenkins-k8s csanchez/jenkins-kubernetes

開啟瀏覽器輸入http://localhost:8080,你會看到如下介面:

20170320212459

Jenkins的Kubernetes外掛設定

現在,Jenkins已經預先配置好了Kubernetes外掛,所以我們直接跳到下一步。使用Jenkins GUI,使用Manage Jenkins > Configure System > Cloud > Add a new Cloud > Kubernetes。介面如下圖中的幾個步驟:

20170320212509

接下來按照下圖的設定進行配置:

20170320212516

如果你想使用Jenkins slave,可以在Docker hub上下載jnlp-slave映象。它提供了簡單安裝Slave節點的模板。你可以通過建立模板來配置一個Slave節點,如下圖所示:

20170320212524

為了讓Jenkins slave能參與任務排程,當在Jenkins上建立一個任務的時候,向下圖所示設定你的任務:

20170320212532

現在只需把Kubernetes Pod模板中的標籤的名稱放在restrict部分,儲存並應用新的設定。當構建此Job時,會看到Slave上執行這個Job。
一切準備就緒了!你現在可以根據需要新增更多的外掛。

Fabric8

Fabric8是一個基於Docker,Kubernetes和Jenkins的開源微服務平臺。 它是由Red Hat建立的。 該專案的目的是通過持續交流水線輕鬆建立,構建,測試和部署微服務,然後使用持續改進和ChatOps執行和管理它們。
Fabric8會自動安裝並配置一下內容:

  • Jenkins
  • Gogs
  • Fabric8 registry
  • Nexus
  • SonarQube

下圖是Fabric8的架構圖:

20170320212843

為了開始我們的演示,你需要使用命令列工具安裝Fabric8(gofabric8)。下載gofabric8,解壓之後執行命令:

$ sudo cp /usr/local/bin/ gofabric8

在終端上檢查$ gofabric8命令是否安裝成功:

$ gofabric8 deploy -y

執行命令後,終端上會顯示:

20170320212850

建立祕鑰:

$ gofabric8 secrets -y

終端返回:

20170320212900

使用kubectl檢視pod執行狀態:

20170320212907

你可以使用Kubernetes Dashboard提供的頁面檢視所有Pod的狀態,開啟瀏覽器,輸入:http://192.168.99.100:30000:

20170320212915

相似的,可以開啟Fabric8的頁面:

20170320212922

我們來分析一下上面的命令的執行過程,可以通過一個工作流圖展示:

20170320212929

實現CI/CD

說起來容易做起來難。從源頭構建Jenkins並整合Kubernetes實現持續整合(CI)僅僅是故事的一部分,但是實現持續釋出(CD)時另外一個非常不同而且更加複雜的故事了。
這裡有一些關於使用Jenkins外掛的技巧,他們能幫你更加容易地實現Jenkins的持續交付。

Pipeline Plugin

Pipeline是由Jenkins社群構建的核心外掛。此外掛確保任何編排引擎與你的環境整合,而且複雜性很低。目前,我相信這僅僅是個開始,因為不同的社群已經為這種引擎構建不同的外掛,這些外掛都圍繞Jenkins UI展開。使用Pipeline外掛,使用者可以在Jenkinsfile中實現他們專案的整個構建/測試/部署的流水線,並將這個檔案跟程式碼儲存在一起,作為程式碼的一部分放進程式碼控制中。

GitHub Plugin

這些天,大多數工作都使用GitHub作為原始碼管理(SCM)工具。我建議你使用GitHub外掛,它可以幫助你的Jenkins從GitHub拉取程式碼,並分析和測試。為了實現鑑權訪問,我建議你看看GitHub OAuth外掛。

Docker Plugin

對於Docker來說,這是最適合的外掛之一,幫助你做幾乎一切與Docker有關的事情。 這個外掛還能幫助你使用Docker容器作為Jenkins Slave節點。還有幾個其他的Docker外掛,根據時間和你的用法,可以在它們之間切換。

AWS Plugin

AWS人員推出了一個名為AWS Pipeline的超棒的服務。 此特定服務可幫助您使用AWS實現持續交付。 目前,這個外掛正在大量開發,可能不適合生產環境。 另外,可以檢視AWS CodeCommit關注進度。

OpenStack

對於OpenStack使用者,OpenStack外掛適合使用OpenStack的環境配置。

Google Cloud Platform

可以在Google Cloud Platform上提供了部署管理器,使用部署管理器,你可以建立靈活的宣告性模板,這些模板可以部署各種雲平臺,例如Google Cloud Storage, Google Compute Engine和Google Cloud SQL。部署管理器還可以將資源的使用定義儲存在釋出模板中。這是一個非常新的外掛,但是我認為他是一個值得嘗試好工具,如果你希望實現自動化和Google的雲服務。

本文轉自中文社群-使用Kubernetes-Jenkins實現CI/CD


相關文章