如何在 Kubernetes 上配置 Jenkins?

2021-01-18 CSDN

作者 | Sudip Sengupta

譯者 | 火火醬,責編 | Carol

封圖 | CSDN 下載自視覺中國

在本文中,我們將一起完成在Kubernetes上配置Jenkins的工作。作為一款被廣泛使用的開源CI伺服器,Jenkins提供了數百個插件,能夠為我們項目的構建、部署和自動化提供有力支持。

接下來,我們將:

1.使用minikube創建一個Kubernetes集群(這步不是必須的,如果你已經有Kubernetes集群了的話,可以跳過這一步)。

2.為Jenkins創建命名空間和持久卷。

3.使用Helm安裝Jenkins。

4.設置並運行pipeline,對一個簡單的web應用程式進行測試。

先決條件

1.Docker。有關安裝Docker的詳細信息,請參閱下方「Docker安裝」頁面。

https://docs.docker.com/get-docker/

2.Kubernetes集群。如果沒有運行中的Kubernetes集群的話,請參閱章節「使用minikube創建Kubernetes集群」

3.HelmCLI。可以按照下方連結中的步驟安裝Helm CLI。

https://helm.sh/docs/intro/install/?ref=hackernoon.com

用minikube創建一個Kubernetes集群(可選)

Minikube是一款在計算機上創建單節點Kubernetes集群的工具。如果沒有Kubernetes集群的話,可以按照以下步驟進行創建:

1. 安裝minikube :請參照下方「 Install minikube」頁面中的步驟進行安裝。https://kubernetes.io/docs/tasks/tools/install-minikube/?ref=hackernoon.com

2. 安裝kubectl:請參照下方「Install and Set Up kubectl 」頁面中的步驟進行安裝。

https://kubernetes.io/docs/tasks/tools/install-kubectl/?ref=hackernoon.com

3. 然後就可以輸入以下命令,創建minikube集群

minikube start minikube v1.5.2on Darwin 10.15.2 Automatically selected the 'hyperkit' driver (alternates: [virtualbox]) Creating hyperkit VM (CPUs=2, Memory=2000MB, Disk=20000MB) ... Preparing Kubernetes v1.16.2on Docker '18.09.9' ... Pulling images ... Launching Kubernetes ... Waiting for: apiserver Done! kubectl isnow configured touse"minikube"

4. 創建完集群後,可以輸入以下代碼來驗證其狀態:

minikube status

如果一切順利的話,應該會看到:

host: Runningkubelet: Runningapiserver: Runningkubeconfig: Configured

我們還可以通過使用內置的Kubernetes用戶界面來了解集群概況:運行以下命令:

minikube dashboardVerifying dashboard health ... Launching proxy ... Verifying proxy health ... Opening http://127.0.0.1:56993/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

打開的網頁中包含了Kubernetes集群的狀態信息:

我們還可以使用儀錶盤(dashboard)與Kubernetes集群進行交互。但是,這就有點超綱了。如果想要了解更多如何使用Kubernetes儀錶盤創建或修改Kubernetes資源的信息,可以看看下方「 Web UI (Dashboard)」連結。

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/?ref=hackernoon.com

為Jenkins做好準備

按照以下步驟設置Jenkins:

創建一個命名空間,從而在Kubernetes集群中將Jenkins與其他部署分離開。創建PersistentVolume以存儲Jenkins數據,方便我們在重新啟動時保留數據。按照以下步驟為Jenkins設置好部署環境:

1. 運行以下命令,創建一個名為jenkins-namespace.yaml的文件:

apiVersion: v1kind: Namespacemetadata: name: jenkins

2. 輸入以下命令以規範應用:

kubectl apply -f jenkins-namespace.yamlnamespace/jenkins created

3. 將以下代碼粘貼到jenkins-volume.yaml文件中:

apiVersion: v1kind: PersistentVolumemetadata: name: jenkins-pv namespace: jenkinsspec: storageClassName: jenkins-pv accessModes: - ReadWriteOnce capacity: storage: 10Gi persistentVolumeReclaimPolicy: Retain hostPath: path: /data/jenkins-volume/

4.輸入以下命令以規範應用:

kubectlapply-fjenkins.volume.yaml

需要注意的是,hostPath使用節點/data/jenkins-volume/來模擬附屬網絡存儲。這種方法只適合於開發和測試階段。在生產階段,需要提供網絡資源(如Google Compute Engine持久盤,或Amazon Elastic Block Store卷)。

安裝Jenkins

Jenkins部署通常由一個主節點和一個或多個代理節點(可選)組成。Jenkins是一個依賴於多個組件的複雜應用程式,我們可以通過Helm來簡化Jenkins部署。

(Helm:https://helm.sh/?ref=hackernoon.com)

Helm是Kubernetes的一個包管理器,其打包格式被稱為chart。在GitHub上能夠找到許多社區開發的chart。

(GitHub:https://github.com/helm/charts?ref=hackernoon.com)

1. 創建一個覆蓋文件,並將其作為實參傳給Helm CLI。將 https://raw.githubusercontent.com/kubernetes/charts/master/stable/jenkins/values.yaml中的內容粘貼到values.yaml文件中。

然後在你喜歡的文本編輯器中打開values.yaml文件,將以下行:

storageClass:

修改為:

storageClass: jenkins-pv

2.現在,我們可以通過運行helm install命令來安裝Jenkins,並傳遞以下參數:

helm install jenkins -f values.yaml stable/jenkins --namespace jenkins

會得到類似以下輸出:

NAME: jenkinsLAST DEPLOYED: Mon Dec 3017:26:082019NAMESPACE: jenkinsSTATUS: deployedREVISION: 1NOTES:1. Get your 'admin' user password by running:printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo2. Get the Jenkins URL to visit by running these commands in the same shell:export POD_NAME=$(kubectl get pods --namespace jenkins -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=jenkins" -o jsonpath="{.items[0].metadata.name}") echo http://127.0.0.1:8080 kubectl --namespace jenkins port-forward $POD_NAME 8080:80803. Login with the password from step 1 and the username: admin

3.根據你環境的不同,Jenkins可能需要一定時間才能完成初始化,輸入以下命令來檢查Pod狀態:

kubectl get pods --namespace=jenkins

Jenkins安裝後,狀態應像以下輸出這樣為Running:

kubectl get pods --namespace=jenkinsNAME READY STATUS RESTARTS AGEjenkins-645fbf58d6-6xfvj 1/1 Running 02m

4.需要通過以下命令檢索密碼,才可以訪問Jenkins伺服器:

printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echoUm1kJLOWQY

注意,你的密碼應該是不一樣的。

5. 使用以下命令來獲取運行Jenkins的Pod名稱:

export POD_NAME=$(kubectl get pods --namespace jenkins -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=jenkins" -o jsonpath="{.items[0].metadata.name}")

這將創建名為POD_NAME的環境變量,將其值設置為運行Jenkins的Pod名稱。

6. 使用kubectl命令設置埠轉發:

kubectl --namespace jenkins port-forward $POD_NAME8080:8080Forwarding from 127.0.0.1:8080 -> 8080Forwarding from [::1]:8080 -> 8080

添加Executor

Jenkins將executor定義為「用於在節點上執行由Pipeline或Pipeline定義的工作槽。一個節點可以配置零個或多個Executor,與在該節點上能夠執行的Project或Pipeline數量相對應。」

接下來,我們將向Jenkins節點添加executor。

1. 瀏覽器打開http://localhost:8080,使用用戶名admin和之前檢索到的密碼進行登錄。

2. 在左側導航欄中,選擇Jenkins -> Manage Jenkins -> Manage Node

3. 選擇「Master 」,然後單擊「Configure」

4. 在 # of executors 輸入框中輸入「1」,然後單擊「Save 」

安裝並配置Node.js插件

在本教程中,我們將使用Node.js插件來部署並測試一個用Express.js編寫的簡單web應用程式。

按照以下步驟安裝Node.js插件:

1. 左側導航欄Jenkins -> Manage Manage Jenkins -> Manage Plugins -> Available Plugins,選擇NodeJS 插件,然後單擊「Install without restart」

2. 安裝完成後,會出現以下界面:

3. 左側導航欄Jenkins -> Manage Jenkins -> Global Tool Configuration,選擇Add NodeJS。輸入NodeJS安裝名稱,然後選擇一個NodeJS版本,選好後單擊「Save 」。

HelloWorld 存儲庫

為了展示Jenkins 的工作原理,我們創建了一個監聽埠3000並輸出「Hello World!」的簡單Express.js 伺服器。然後我們編寫了一個單元測試,檢查該web 應用程式是否能夠按預期工作。同時,我們還更新了package.json 文件,以便Jenkins 可以通過npm test命令執行單元測試。

最後,我們用以下命令創建了一個Jenkinsfile:

pipeline { agent any tools {nodejs "node"} stages { stage('Cloning Git') { steps { git 'https://github.com/andreipope/HelloWorld' } } stage('Install dependencies') { steps { sh 'npm install' } } stage('Test') { steps { sh 'npm test' } } }}

以上構建了一個三階段CD pipeline:

首先,克隆了HelloWorld Git存儲庫然後,通過運行npm install 安裝了依賴項最後,執行了單元測試接下來,我們將配置Jenkins以運行該腳本。

創建並運行Pipeline

Pipeline為交付軟體提供了可重複且一致的流程。藉助Jenkins,我們可以用Groovy程式語言將pipeline作為DSL腳本來編寫。

按照以下步驟創建和運行pipeline:

1. 選擇Jenkins -> New Item,然後輸入pipeline名稱(HelloWorld),完成後單擊「OK」。

2. 下一頁,選擇「Pipeline script from SCM」,並將Repository URL 設置為「https://github.com/andreipope/HelloWorld」。這是一個公共存儲庫,所以我們不需要配置任何證書憑證。

Jenkins會自動檢索位於存儲庫根目錄中的Jenkinsfile。

3. 現在,我們可以手動運行pipeline了:

4. 等它運行完後,應該會看到控制臺輸出類似內容:

+ npm test> HelloWorld@1.0.0 test /var/jenkins_home/workspace/HelloWorld> mocha ExpressJS server Prints out Hello World (291ms)1 passing (373ms)[Pipeline] }[Pipeline] // withEnv[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // withEnv[Pipeline] }[Pipeline] // withEnv[Pipeline] }[Pipeline] // node[Pipeline] Endof PipelineFinished: SUCCESS

恭喜你!你已經成功在Kubernetes配置了Jenkins,並用它測試了一個簡單的web應用程式。雖然看起來本文似乎包含了大量信息,但其實這只是Jenkins 和Kubernetes中最為淺顯的內容。多嘗試就會打開新世界!

相關焦點

  • 如何在Kubernetes容器環境下部署Spinnaker?
    本文重點介紹spinnaker的概念、安裝與踩過的坑,spinnaker在kubernetes的持續部署,以及線上容器服務的選擇與多區容災。 1、關於Spinnaker Spinnaker 是什麼?我們先來了解下它的概念。 Spinnaker 是 Netflix 的開源項目,是一個持續交付平臺,它定位於將產品快速且持續的部署到多種雲平臺上。Spinnaker 有兩個核心的功能集群管理和部署管理。
  • 手把手教你用 Jenkins+K8S 打造流水線環境
    K8S pod template 配置 Jenkins 的 kubernetes-plugin 在執行構建時會在 kubernetes 集群中自動創建一個 Pod,並在 Pod 內部創建一個名為 jnlp 的容器,該容器會連接 Jenkins 並運行 Agent 程序,形成一個 Jenkins
  • SpringBoot+GitLab+Docker+Jenkins實現持續集成下
    該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。接下來我們來編寫一個最簡單的SpringBoot入門項目。<?
  • 使用Jenkins、Docker 構建部署 Serverless 應用
    本文將介紹如何使用 Jenkins 和 Docker 構建並部署 Serverless 應用。 提示:用 PC 瀏覽效果更佳! 在 GitHub 上找到了 docker-python-nodejs 倉庫:https://github.com/nikolaik/docker-python-nodejs。
  • Kubernetes ELK 日誌收集
    一般來說,這種agent用一個容器來運行,可以訪問該節點上所有應用程式容器的日誌文件所在目錄由於這種agent必須在每個節點上運行,所以需要使用DaemonSet控制器運行該應用程式。在節點運行agent,不需要對節點上運行的應用程式進行更改,對應用程式沒有任何侵入性,但是這種方法也僅僅適合於日誌輸出到stdout和stderr的應用程式日誌。
  • 使用Kubeadm安裝Kubernetes
    之前在aliyun ubuntu 14.04上安裝kubernetes 1.3.7的經驗和教訓,讓我略微有那麼一丟丟底氣,但實際安裝過程依舊是一波三折。這既與kubeadm的unstable有關,同樣也與cni、第三方網絡add-ons的質量有關。無論哪一方出現問題都會讓你的install過程異常坎坷曲折。
  • 10分鐘搞定讓你困惑的 Jenkins 環境變量
    前言Jenkins, DevOps 技術棧的核心之一,CI/CD 離不開編寫 Pipeline 腳本,上手 Jenkins ,簡單查一下文檔,你就應該不會被 agent,stages,step 這類關鍵詞弄懵,也能很快構建出 pipeline 的骨架但是當向骨架中填充內容的時候,尤其如何利用環境變量(系統內置 | 自定義),多數人都會變得比較混亂
  • 管理Kubernetes集群的50個開源實用工具
    Link: https://github.com/kubernetes/minikubeCost: Free3. KubeadmKubeadm is a Kubernetes distribution tool since version 1.4.
  • K8S dashboard 2.0 安裝配置並使用 ingress-nginx 訪問
    K8S dashboard 安裝配置(v1.17.0) 一、dashboard總配置文件下載 官網地址:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard
  • 《蹲坑學K8S》之22-2:Kubernetes授權機制
    在使用 RBAC 時,只需要在啟動 kube-apiserver 時配置 --authorization-mode=RBAC 即可。將Role權限落到實際用戶或程序上,即RoleBinding(角色綁定)或CLusterRoleBinding(集群角色綁定)。
  • 百度PaddlePaddle聯手Kubernetes,助力開發者高效訓練深度學習模型
    「使用 Kubernetes 這樣的框架,開發者再也不用擔心為了在一個標準雲平臺上配置和部署深度學習訓練系統而編寫不必要的代碼。」PaddlePaddle 項目技術負責人 Yi Wang 說,「這最終能幫助他們更快地將他們的項目落地。」
  • 持續集成引擎 Jenkins 2.138.1 和 2.141 發布
    (issue 50336) Upgrade Winstone from 4.2 to 4.4 to update Jetty from 9.4.8.v20171121 to 9.4.11.v20180605, adding an option to enable JMX when running Jenkins using java -jar jenkins.war.
  • 乾貨分享:如何使用Kubernetes的Ingress API
    但是,如果沒有仔細的平衡和體系結構上的統一,許多獨立的和量身定製的解決方案將由自治團隊構建並整合在一起。混合多雲生態系統組織正在努力將新的公有雲功能集成到其現有的本地環境中時,這種複雜性進一步加劇了。如果沒有周密的計劃,通過眾多獨立技術生態系統造成的無意間的矛盾程度最終將成為維持組織投資于敏捷開發的障礙。
  • 如何將單片機的上拉電阻配置為上拉輸入模式
    打開APP 如何將單片機的上拉電阻配置為上拉輸入模式 發表於 2018-12-04 14:31:15 1.什麼是上拉電阻 在學習單片機的時候,我們經常遇到一組名詞:上拉電阻和下拉電阻,通過學習我們知道上下拉電阻不僅能使當前電平穩定避免受到幹擾,同時上拉電阻還能提高單片機的驅動能力。
  • 如何配置web伺服器
    如何配置web伺服器?在伺服器上配置Web服務,首先需要安裝網絡環境,然後上傳web項目文件,在配置web服務時,有一些安全策略也要注意。1 啟用日誌記錄功能Web伺服器應配置日誌功能,對用戶登錄進行記錄,記錄內容包括用戶登錄使用的帳號、登錄是否成功、登錄時間以及遠程登錄時用戶使用的IP位址。
  • 如何看手機配置高低 有哪些手機配置高
    ,一來不知道怎麼看,二來也不知道手機配置如何看高低。下面我們就來說說如何看手機配置高低以及有哪些手機配置高? 對於大多數朋友而言,購買一部手機,多數是看品牌以及外觀的,很少人會去看手機配置,一來不知道怎麼看,二來也不知道手機配置如何看高低。下面我們就來說說如何看手機配置高低以及有哪些手機配置高?
  • 如何配置交換機SSH遠程登錄
    如何配置交換機SSH遠程登錄,本期我們就來了解下ssh遠程登陸的方式,以銳捷交換機為例。 如何配置銳捷SSH遠程登陸? 一、配置思路 配置ssh遠程登陸,一般是有四個步驟: 1、首先選擇Console方式登陸交換機 2、開啟交換機的SSH服務功能並配置IP 3、生成加密密鑰 4、配置SSH管理的登入口令
  • 如何解決工程車聲光元件配置上的痛點問題
    打開APP 如何解決工程車聲光元件配置上的痛點問題 bosugroup_com 發表於 2020-11-18 15:38:39
  • 如何去配置氫氧化鈣溶液,七個配置流程學起來
    如何去配置氫氧化鈣溶液,七個配置流程學起來,你知道如何去進行氫氧化鈣溶液的配置嗎?我們都知道生石灰水解反應生成氫氧化鈣,又因為氫氧化鈣微溶於水,把沒有溶解的氫氧化鈣除去,就可以得到氫氧化鈣溶液了。總結:以上的這七個配置溶液流程!