《玩轉Jenkins系列》之整合K8S
阿新 • • 發佈:2019-01-02
《玩轉Jenkins系列》之整合K8S
前言*序
今天這篇Topic主要講一下如何在Jenkins裡面與K8S進行深度融合。目標只有一個:
動態建立編譯機,提升編譯叢集資源利用效率
配置篇
系統管理選單下面如下圖
說明:
- 名稱可以隨意取。這個為後續的時候用到
- Jenkins地址,請填寫Jenkins伺服器訪問地址
- 配置完了之後點連線測試,如果提示"Connection test successful"說明連線到叢集上了
上面K8S的地址什麼的都沒有配置為什麼就連線成功了?好奇的看官肯定會有疑問了。
『The URL of the Kubernetes API server. If not set the connection options will be autoconfigured from service account or kube config file.』 在這裡我們用了kube配置檔案來完成這個事情的。
登入Jenkins服務所在的容器內將APIserver的連線配置kube/config配置檔案放到~/.kube/config。這樣它就會自動去完成連線了。
使用篇
現在連線上了K8S了那我們先建立一個非常簡單的流水線,裡面就輸出一條:"hello jenkins and k8s"
a)先建立一條流水線的任務
b) 我們選擇用Jenkinsfile的方式
c) 編寫Jenkinfiles檔案
pipeline { agent { kubernetes { label 'mypodx' cloud 'yaofang_k8s_test' yamlFile 'mpod.yaml' } } stages { stage('git clone') { steps { git credentialsId: '3b1cd500-c1a2-4bd6-84f0-237b0c879fbf', url: '${url}' } } stage('hold') { agent none steps { input "Does the staging environment look ok?" } } stage('Run containers shell') { steps { sh '/root/bin/git.sh ${url}' } } } }
說明:
- cloud 表示我們在上面配置的名稱進行關聯
- yamlFile 表示通過yaml來建立Pod
以下是建立Pod的描述檔案:
metadata: labels: some-label: some-label-value spec: volumes: - hostPath: path: /data/mvn_cache type: "" name: mvn-cache containers: - name: jnlp alwaysPullImage: true volumeMounts: - mountPath: /root/repository name: mvn-cache image: registry.cn-shanghai.aliyuncs.com/cpaas/build_dockerfile:v5 env: - name: CONTAINER_ENV_VAR value: jnlp
說明:
- 通過volumes可以將宿主機的目錄掛載到容器內,實現對maven編譯場景下的加速
- images這個映象是我們自定義映象,可以用於構建自己想的編譯執行環境.
d) 執行流水線
先看下K8S上面的POD變化
可以看到出來了一個POD。
再來看下流水線控制檯的輸出
最佳實踐
基於映象的實踐,可以針對編譯機的映象做更多的擴充套件。比如可以整合docker工具/OSS工具等。另外針對maven編譯機的加速問題也可以進一步優化,可以將.m2下面的檔案放到宿主機上去,這樣可以提升編譯速度。
最佳實踐之解決git許可權方案
如果我們直接在映象中執行一個shell指令碼的話,我們會發現git clone程式碼的時候會報許可權不足。解決辦法
- 將宿主機的/root/.ssh/目錄掛載到Pod的容器裡面即共享公鑰檔案
- 將宿主機的公鑰配置到GIT倉庫
類似的啟動如下:
docker run -itd -v /root/.ssh/:/root/.ssh/ -v /tmp/build_maven/:/root/repository/
問題交流群
如果大家在實際應用過程中遇到什麼問題,也可以加釘釘群:23145481進行交流。