1.下載相應文件
mkdir jenkins && cd jenkins wget https://raw.githubusercontent.com/zhijiansd/ansible-k8s/master/addons/jenkins/jenkins-rbac.yaml wget https://raw.githubusercontent.com/zhijiansd/ansible-k8s/master/addons/jenkins/jenkins.yaml
注:這裏的RBAC文件是參考stackoverflow上一個問答而來,現在找不了鏈接了,但是依然感謝
2.部署Jenkins
kubectl create -f .
3.查看 Pod 和 Services
# kubectl -n kube-ops get pod NAME READY STATUS RESTARTS AGE jenkins-78d577d47-pbcqv 1/1 Running 0 1m # kubectl -n kube-ops get service jenkins NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE jenkins LoadBalancer 10.244.1.201 <pending> 8080:37899/TCP,50000:36476/TCP 2m
注:使用NodeIP:37899即可進入Jenkins的web界面,而在這裏我配置了traefik。
4.查看Jenkins密鑰並開始安裝Jenkins
# kubectl -n kube-ops exec -it jenkins-78d577d47-pbcqv cat /var/jenkins_home/secrets/initialAdminPassword f547dd8a21384640ba0bfe4282912bf7
5.安裝插件
6.創建管理員用戶
7.配置Jenkins URL並保存
8.點擊“開始使用Jenkins”使用Jenkins
9.Jenkins界面如下
10.安裝 Kubernetes 和 GitLab 插件
11.單擊【系統管理】-> 【系統設置】,拖到最後找到【雲】,然後點擊【新增一個雲】
12.配置kubernetes
配置註釋:
name: kubernetes(默認)
kubernetes 地址: https://kubernetes.default.svc.cluster.local(這裏使用kube-dns,也可以配置apiserver地址)
Jenkins 地址: http://jenkins:8080(這裏配置的Jenkins是service名,也可以直接配置http://ip:port)
Jenkins 通道: jenkins:50000(這裏也是配置的service:port,也可以配置ip:port)
這裏沒有添加憑據,因爲已經在rbac文件中做了相關配置。如使用二進制包等集羣外安裝的Jenkins,則需要添加憑據。
點擊【Test Connection】,如出現 Connection test successful 證明 Jenkins 已經可以和 Kubernetes 建立連接了。
13.配置Jenkins slave
配置註釋:
名稱: 如 --> jenkins-slave
標籤列表: 如 --> auto
用法: 儘可能的使用這個節點
容器列表:
容器模板:
名稱: jnlp
Docker鏡像: 192.168.100.100/jenkinsci/jnlp-slave:3.23-1-alpine
工作目錄: /home/jenkins(默認)
命令參數: '${computer.jnlpmac} ${computer.name}'
分配僞終端: true(默認)
14.構建一個流水線(pipeline)項目
測試腳本如下:
def label = "mypod-${UUID.randomUUID().toString()}" podTemplate(label: 'mypod', cloud:'kubernetes') { node('mypod') { stage('Run shell') { sh 'echo hello world' } } }
注:這裏的 cloud 要與前面配置的雲的名稱相同。
更多詳情: https://github.com/jenkinsci/kubernetes-plugin
15.點擊【立即構建】進行構建
16.構建完成後顯示如下(藍色爲成功,紅色爲失敗)
17.點擊相應構建查看<控制檯輸出>
18.指定使用私有 slave 節點鏡像構建流水線(pipeline)項目
podTemplate(label: 'mypod', cloud: 'kubernetes', containers: [ containerTemplate( name: 'jnlp', image: '192.168.100.100/jenkinsci/jnlp-slave:3.23-1-alpine', alwaysPullImage: true, args: '${computer.jnlpmac} ${computer.name}'), ], volumes: [ hostPathVolume( mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'), ],) { node('mypod') { stage('Run shell') { sh 'echo hello world' } } }
19.點擊相應構建查看<控制檯輸出>,這時候使用的就是自定義的slave鏡像了
20.單擊【系統管理】-> 【系統設置】,配置連接GitLab,點擊【Test Connection】,出現Success即爲連接成功
配置註釋:
Connection name: gitlab
Gitlab host URL: http://gitlab(此處gitlab使用的是http://service,也可以直接配置IP)
Credentials: 【Add】 -> 【Jenkins】 ->
Jenkins憑據提供者:Jenkins
添加憑據:
Domain: 全局憑據(默認)
類型: GitLab API token
範圍: 全局(默認)
API token:********
在GitLab用戶下創建 API token,點擊【Create personal access token】創建令×××(只存在一次,記得保存)
配置註釋:
Name: jenkins(隨意配置)
Expires at: 2028-08-08(隨意配置)
Scopes: api(必須勾選)
21.使用 Jenkins "構建一個自由風格的軟件項目"
A.在“General”下勾選“限制項目的運行節點”並填寫slave標籤
B.在“源碼管理”下配置“Git”
配置註釋:
Git:
Repository URL: 如 http://gitlab/wangzhijian/abc.git
Credentials:
Add:
Domain: 全局憑據
類型: Username with password
範圍: 全局
Username: wangzhijian
Password: ******
注:如配置正確不會有任何提示,配置錯誤會有提示(一般來說是憑據錯誤)
C.構建觸發器
配置註釋:
勾選"Build when a change is pushed to GitLab. GitLab webhook URL"
高級:
Allowed branches:
Filter branches by regex: true
Target Branch Regex: master
Secret token: 點擊 Cenerate 進行創建,然後複製 token 至 gitlab
進入相關項目“Settings” --> "Integrations" -->
URL: http://jenkins/project/abc (這裏配置的是service,並不是構建觸發器上的https://jenkins.zhi.io/project/abc)
Secret Token: 這裏配置就是上面Jenkins生成是secret token(Jenkins工程和GitLab項目的token必須一樣才能拉取)
D.構建,選擇"執行shell"並寫入命令(注:gitlab下我寫了一個hello.sh的shell)
E.點擊"立即構建"進行構建,如果構建成功即會顯示"Finished: SUCCESS"