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

來源:互聯網
上載者:User

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

https://yq.aliyun.com/articles/180888

摘要: 本節我們通過在Kubernetes集群上建立並設定JenkinsServer實現套用開發管理的CI/CD流程,並且利用Kubernetes-Jenkins-Plugin實現動態按需擴充jenkins-slave。

本節我們通過在Kubernetes集群上建立並設定JenkinsServer實現套用開發管理的CI/CD流程,並且利用Kubernetes-Jenkins-Plugin實現動態按需擴充jenkins-slave。

安裝Kubernetes集群

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

安裝JenkinsServer

為了讓您的JenkinsServer可以具有FailOver的能力,建議您將Jenkins的資料存放區到阿裡雲NAS隱藏上。

步驟一:

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

步驟二:建立NAS持久化卷

然後,建立一個Kubernetes持久化NAS隱藏卷。參見建立NAS持久化隱藏卷
假設您已經在阿裡雲主控台上面建立了您自己的NAS隱藏,其掛載點為:yournas-xxxx.cn-hangzhou.nas.aliyuncs.com。
執行下面的指令下載一個persistentvolume範本,取代裡面的server的值為您的掛載點,然後執行kubectlapply -f pv.yml建立持久化NAS卷。

root@iZbp:~/jenkins# curl -L http://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

步驟三:建立JenkinsServer

通過以下指令啟動一個JenkinsServer。該指令會建立一個阿裡雲公網SLB,方便您從公網存取jenkins服務。如果不需要公網存取請將Service的type變更為NodePort。

root@iZbp:~/jenkins# curl -L http://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
NAMECLUSTER-IPEXTERNAL-IPPORT(S)AGE
jenkins172.19.0.1040.112.120.10 53/UDP,53/TCP34m

然後通過位址http://40.112.120.10存取jenkins服務.

步驟四:設定jenkins

存取上面的jenkins位址http://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實現dynamicslaves provision.

安裝Kubernetes-plugin
首先進入外掛程式管理網頁【系統管理】->【管理外掛程式】->【可選外掛程式】,搜尋kubernetesplugin,勾選要安裝的外掛程式,然後點選【直接安裝】。
14991571780357

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

設定jenkins kubernetes-plugin外掛程式
按一下【系統管理】->【系統設定】,找到【雲】,然後點選【新增一個雲】
14991591747029

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

這樣就設定好了kubernetes-plugin,可以實現動態jenkins-slavesin pod.

Jenkins CI樣本
新建一個Pipeline任務。
14991611809407

然後將下面的內容貼上到pipelineScript裡面,儲存。

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: [

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,動態資源佔用,按需擴充,可以極大的提高系統的資源使用率及可擴充性。

阿裡雲容器服務團隊致力於在阿裡雲上推廣容器技術。想瞭解其他容器服務內容,請存取阿裡雲容器服務

相關產品:

  1. 容器服務(Docker)
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.