jenkins+maven+gitlab+harbor+k8s的 CI/CD
首先需要安裝jenkins,maven,gitlab,harobor,k8s等工具:
- jenkins安裝 安裝文檔:https://www.cnblogs.com/momoyan/p/12770919.html
- maven安裝 安裝文檔:https://blog.csdn.net/qq_38270106/article/details/97764483
- gitlab安裝 安裝文檔: https://www.cnblogs.com/momoyan/p/14033256.html
- harbor安裝 安裝文檔:https://www.cnblogs.com/dalianpai/p/11800371.html
- k8s安裝 安裝文檔:https://blog.csdn.net/weixin_42214548/article/details/109001157
- docker安裝 安裝文檔:https://www.cnblogs.com/momoyan/p/9129200.html
1.Jenkins配置
安裝完之后,開始配置:
1.1.安裝jenkins插件
點擊系統管理,管理插件,安裝 GitHub Branch Source Plugin,Gitlab Authentication plugin,Gitlab Hook Plugin,GitLab Plugin,Maven Repository Server Plugin,Publish Over SSH,Workspace Cleanup Plugin 這些插件
插件下載地址:
1.2.新建任務
1.3.配置jenkins項目
(1)寫好描述 主要是寫上項目名
(2)配置git地址
注:第一個紅框標起來的是git地址,是從gitlab上獲取的,首先登陸gitlab,如下圖,從這里獲取
而第二個紅框標識的證書而是需要從jenkins初始頁面憑據添加的,首先點擊jenkins首頁的憑據,依次點擊
之后點擊
類型選擇:
之后設置成如圖樣子,注意username要和登陸jenkins的用戶一樣,證書生成也不多說,在jenkins本機生成,貼上去即可,ID選項不用管,之后會自動生成一串ID:
設置好憑據后,回到創建jenkins項目的界面,選擇:
如果出現大片紅色報錯,沒關系,那一定是gitlab沒有配置jenkins的密鑰,去配置一下,首先打開gitlab,點到相應項目中,再點擊圖中位置,填寫好.ssh/id.rsa.pub中的內容即可:
再回到jenkins看看是否可以了呢,可以了就不會報一片紅~ 繼續下一步
(3)構建觸發器選擇基本默認,有別的需要可以自定義:
這個選項中的url之后會用到,需要配置到gitlab~
(4)接下來就是maven打包這里,配置pom.xml的絕對路徑,然后輸入打包命令,將會自動完成:
(5) 接下來就是配置建立后的步驟:
添加shell,完成要完成的動作(根據自己需求來)
HOST="192.168.147.138" API_PORT=80 IMAGE_NAME="192.168.147.138/docker-tomcat/tomcat:v$BUILD_NUMBER" docker build -t $IMAGE_NAME . docker push %IMAGE_NAME
sed -i "s/BUILD_NUMBER/$BUILD_NUMBER/g" docker-tomcat.yaml
再添加一段ssh,通過這個把生成的包或者文件傳到master並執行命令:
配置好點擊保存,這樣,jenkins就算完成了,接下來去到gitlab看下:
點到相應的項目中,配置url,這個url在jenkins配置的時候出現過,復制過來即可,保存
配置好以后,拉到底下,我們測試一下:
出現這樣說明配置成功了:
這樣子整套CI/CD流程也就做完了,提交代碼后會自動打包部署。
測試:
寫博客的這個項目我並沒有保存,畢竟也是公司環境,所以我拿之前配置好的一個項目(項目名:docker)做下測試,記錄下成果:
首先我提交代碼,看jenkins變化:
部署已經成功了,看下部署過程:
部署已經完成了,去機器上看下:
kubectl get po
下圖可以看到這個pod鏡像是剛打出來的,v33版本
kubectl describe pod ng-364889701-m09zn
去harbor看下鏡像,是有的:
版本回滾
那么我們發現一個問題,cicd是做好了,可是如果版本有問題,怎樣回滾呢,其實也是很好解決的,可以用k8s自己的rolling update機制去完成,不但可以回滾版本,還可以彈性伸縮pod數量。
首先先試一下回滾,查看一下之前的版本:
kubectl rollout history deployment ng
讓我們用一條命令回滾到上一版本:
kubectl rollout undo deployment ng
看下現在pod用的是否是上個版本的鏡像:
kubectl get po
之前我們是v33版本,回滾到v32版本也是成功了,接下來說下怎樣回滾到指定版本:\
kubectl rollout history deployment ng
通過一條
kubectl rollout undo deployment deploy名 --to-revision=2
指定版本前方所對應的數字即可。
彈性伸縮
接下來說如何彈性伸縮:
手動伸縮通過命令:
kubectl scale deployment deploy名 --replicas=2
例如:
kubectl scale deployment ng --replicas=2
設定replicas數量即可,如圖: