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
,如下圖:
需要使用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包。
這裏選擇安裝插件,由於連接國外的網絡問題,ant插件不一定能下載成功,建議您先去掉ant插件安裝,然後點下一步等待安裝完成。
步驟五: 配置Kubernetes-jenkins-plugin實現dynamic slaves provision.
安裝Kubernetes-plugin
首先進入插件管理頁麵【係統管理】->【管理插件】->【可選插件】,搜索kubernetes plugin
,勾選要安裝的插件,然後點擊【直接安裝】。
然後勾選安裝後重啟,等待重啟完成後kubernetes-plugin就安裝完成了。
配置jenkins kubernetes-plugin插件
單擊【係統管理】-> 【係統設置】,找到【雲】,然後點擊【新增一個雲】
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.
然後將下麵的內容粘貼到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")
}
}
}
}
最後單擊開始構建,通過構建日誌觀察任務的執行情況,你會發現Jenkins Server會通過Kubernetes啟動一個Pod作為jenkins slave執行構建Pipeline。
小結
通過kubernetes-jenkins-pipline插件,您可以方便的在阿裏雲Kubernetes集群上配置按需啟動的jenkins-slave,動態資源占用,按需擴展,可以極大的提高係統的資源利用率及可擴展性。
阿裏雲容器服務團隊致力於在阿裏雲上推廣容器技術。想了解更多容器服務內容,請訪問阿裏雲容器服務
最後更新:2017-08-29 10:02:51