閱讀539 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Kubernetes集群上基於Jenkins的CI/CD流程實踐

本節我們通過在Kubernetes集群上創建並配置Jenkins Server實現應用開發管理的CI/CD流程,並且利用Kubernetes-Jenkins-Plugin實現動態的按需擴展jenkins-slave。

安裝Kubernetes集群

首先,如果您沒有Kubernetes集群,那麼您需要創建一個。參見創建集群

安裝Jenkins Server

為了讓您的Jenkins Server可以具有Fail Over的能力,建議您將Jenkins的數據存儲到阿裏雲NAS存儲上。

步驟一:

首先您需要連接到Kubernetes集群。參見

步驟二:創建NAS持久化卷

然後,創建一個Kubernetes持久化NAS存儲卷。 參見創建NAS持久化存儲卷
假設您已經在阿裏雲控製台上麵創建了您自己的NAS存儲,其掛載點為:yournas-xxxx.cn-hangzhou.nas.aliyuncs.com。
執行下麵的命令下載一個persistent volume模板,替換裏麵的server的值為您的掛載點,然後執行kubectl apply -f pv.yml創建持久化NAS卷。

root@iZbp:~/jenkins# curl -L https://aliacs-k8s.oss.aliyuncs.com/conf%2Fjenkins%2Fpersistent-volume.yml > pv.yml
root@iZbp:~/jenkins# vi pv.yml
root@iZbp:~/jenkins# kubectl apply -f pv.yml
root@iZbp:~/jenkins# kubectl get pv -n ci

步驟三:創建Jenkins Server

通過以下命令啟動一個Jenkins Server。該命令會創建一個阿裏雲公網SLB,方便您從公網訪問jenkins服務。如果不需要公網訪問請將Service的type更改為NodePort。

root@iZbp:~/jenkins# curl -L https://aliacs-k8s.oss.aliyuncs.com/conf%2Fjenkins%2Fjenkins.yml > jenkins.yml
root@iZbp:~/jenkins# kubectl apply -f jenkins.yml

root@iZbp:~/jenkins# kubectl get po -n ci
root@iZbp:~/jenkins# kubectl get svc -n ci
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
jenkins                172.19.0.10      40.112.120.10 53/UDP,53/TCP   34m

然後通過地址https://40.112.120.10 訪問jenkins服務.

步驟四: 配置jenkins

訪問上麵的jenkins地址https://40.112.120.10,如下圖:
14990745689268

需要使用token來初始化jenkins,該token文件存在於secrets/initialAdminPassword下,您需要手動掛載NAS到本地目錄後查看token內容。使用以下命令,將yournas-xxxx.cn-hangzhou.nas.aliyuncs.com 替換成您自己的掛載點:

root@iZbp:~/jenkins# mkdir -p mnt
root@iZbp:~/jenkins# mount.nfs yournas-xxxx.cn-hangzhou.nas.aliyuncs.com:/ mnt
root@iZbp:~/jenkins# cat mnt/secrets/initialAdminPassword
7b48377b16ef49a8ba678031dd12111a

注意: 如果提示未找到mount.nfs命令,則需要先安裝nfs-utils包。

將上麵輸出的token粘貼到界麵上輸入框進入下一步:
14990751529535
14991565711711

這裏選擇安裝插件,由於連接國外的網絡問題,ant插件不一定能下載成功,建議您先去掉ant插件安裝,然後點下一步等待安裝完成。

然後設置用戶名和密碼。
14991567528063

現在您已經成功的創建了一個jenkins server.
14991567973737

步驟五: 配置Kubernetes-jenkins-plugin實現dynamic slaves provision.

安裝Kubernetes-plugin
首先進入插件管理頁麵【係統管理】->【管理插件】->【可選插件】,搜索kubernetes plugin,勾選要安裝的插件,然後點擊【直接安裝】。
14991571780357

然後勾選安裝後重啟,等待重啟完成後kubernetes-plugin就安裝完成了。
14991572186671

配置jenkins kubernetes-plugin插件
單擊【係統管理】-> 【係統設置】,找到【雲】,然後點擊【新增一個雲】
14991591747029

name: kubernetes
Disable https certificate check: true
kubernetes URL: https://kubernetes.default.svc.cluster.local
JenkinsURL: https://jenkins-svc.default.svc.cluster.local
Connect timeout: 5
Read Timeout: 15

這樣就配置好了kubernetes-plugin, 可以實現動態jenkins-slaves in pod.

Jenkins CI示例
新建一個Pipeline任務。
14991611809407

然後將下麵的內容粘貼到pipeline Script裏麵,保存。

podTemplate(label: 'golang-pod',  containers: [
    containerTemplate(
            name: 'golang',
            image: 'registry.cn-hangzhou.aliyuncs.com/spacexnice/golang:1.8.3-docker',
            ttyEnabled: true,
            command: 'cat'
        ),
    containerTemplate(
            name: 'jnlp',
            image: 'registry.cn-hangzhou.aliyuncs.com/google-containers/jnlp-slave:alpine',
            args: '${computer.jnlpmac} ${computer.name}',
            command: ''
        )
  ]
  ,volumes: [
        /*persistentVolumeClaim(mountPath: '/home/jenkins', claimName: 'jenkins', readOnly: false),*/
        hostPathVolume(hostPath: '/root/work/jenkins', mountPath: '/home/jenkins'),
        hostPathVolume(hostPath: '/var/run/docker.sock', mountPath: '/var/run/docker.sock'),
        hostPathVolume(hostPath: '/tmp/', mountPath: '/tmp/'),
]) 
{
    node ('golang-pod') {

        container('golang') {
            git url: 'https://github.com/spacexnice/blog.git' , branch: 'code'

            stage('Build blog project') {

                sh("make")

            }
        }
    }
}

14991613272396

最後單擊開始構建,通過構建日誌觀察任務的執行情況,你會發現Jenkins Server會通過Kubernetes啟動一個Pod作為jenkins slave執行構建Pipeline。

小結

通過kubernetes-jenkins-pipline插件,您可以方便的在阿裏雲Kubernetes集群上配置按需啟動的jenkins-slave,動態資源占用,按需擴展,可以極大的提高係統的資源利用率及可擴展性。

阿裏雲容器服務團隊致力於在阿裏雲上推廣容器技術。想了解更多容器服務內容,請訪問阿裏雲容器服務

最後更新:2017-08-29 10:02:51

  上一篇:go  這幫阿裏程序猿在改變世界前 要先撼動歌壇
  下一篇:go  Java自學能學會嗎?Java新手學習路線