1. 程式人生 > >《玩轉Jenkins系列》之整合K8S

《玩轉Jenkins系列》之整合K8S

《玩轉Jenkins系列》之整合K8S

前言*序

今天這篇Topic主要講一下如何在Jenkins裡面與K8S進行深度融合。目標只有一個:

動態建立編譯機,提升編譯叢集資源利用效率

配置篇

系統管理選單下面如下圖

20181227105431.png | center | 747x408

說明:

  • 名稱可以隨意取。這個為後續的時候用到
  • 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)先建立一條流水線的任務

20181227110339.png | center | 747x268

b) 我們選擇用Jenkinsfile的方式

20181227110555.png | center | 747x352

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變化

20181227111651.png | center | 747x178

可以看到出來了一個POD。

再來看下流水線控制檯的輸出

20191230123657.png | center | 747x707

最佳實踐

基於映象的實踐,可以針對編譯機的映象做更多的擴充套件。比如可以整合docker工具/OSS工具等。另外針對maven編譯機的加速問題也可以進一步優化,可以將.m2下面的檔案放到宿主機上去,這樣可以提升編譯速度。

最佳實踐之解決git許可權方案

如果我們直接在映象中執行一個shell指令碼的話,我們會發現git clone程式碼的時候會報許可權不足。解決辦法

  1. 將宿主機的/root/.ssh/目錄掛載到Pod的容器裡面即共享公鑰檔案
  2. 將宿主機的公鑰配置到GIT倉庫
    類似的啟動如下:
docker run -itd  -v /root/.ssh/:/root/.ssh/ -v /tmp/build_maven/:/root/repository/

問題交流群

如果大家在實際應用過程中遇到什麼問題,也可以加釘釘群:23145481進行交流。