更多信息請查看公眾號原文:https://mp.weixin.qq.com/s/Q3knDEa6etAM5LZ-ULAeSA
上一章節已經完成了一個最簡單的應用的開發,現在看看怎么把這個應用部署到K8S.
-
檢查Jenkins配置
1.1 Maven Integration, Pipeline Maven Integration, Publish over SSH以及Cucumber reports是否已經安裝成功,如果沒有請安裝
1.2 JDK配置和Maven
進入Global Tool Configuration
Cucumber插件:
1.3 檢查Jenkins URL
進入Configure System:
2. 創建Job
build完之后可以看到哪些功能是正常或者不正常的:
3. SCP免密傳輸配置
在需要復制到目標機器上,設置sshd config:
sudo vim /etc/ssh/sshd_config
讓后重啟sshd服務:sudo service sshd restart
然后重新設置一下root的密碼:sudo passwd
嘗試一下scp:sudo scp id_rsa.pub root@192.168.0.10:/root/.ssh/id_rsa.pub.minikube
4. SSH免密登陸配置
由於Jenkins編譯完成后,需要上傳到Minikube那台機器進行部署,所以在Jenkins那台機器中需要設置免密登陸,我需要從192.168.0.5免密登陸到192.168.0.10:
a. 在遠程服務器192.168.0.10上執行:ssh-keygen -t rsa
.ssh目錄權限設置為700:
chmod -R 700 .ssh/ --一定要700哦
b. 在192.168.0.10 /root/.ssh目錄下執行:
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys --一定要600哦
c. 把遠程服務器的id_rsa.pub拷貝到192.168.0.5本地機器上,並將其內容追加到本地機器的authorized_keys中:
scp id_rsa.pub root@192.168.0.5:/root/.ssh/id_rsa.pub.010
cat id_rsa.pub.010 >> authorized_keys
d. 發送authorized_keys到192.168.0.5
scp authorized_keys root@192.168.0.5:/root/.ssh/
e. 重新把本地的authorized_keys上傳到遠程服務器
scp authorized_keys root@192.168.0.10:/root/.ssh/
或者:ssh-copy-id root@192.168.0.10
authorized_keys中的內容是客戶端的public key中的內容。
f.最后重啟一下把ssh重啟一下吧,下圖免密登陸以及免密scp成功:
5. 設置免密切換賬戶
由於我默認登陸的賬戶是czy, 需要用root進行操作。
sudo vim /etc/sudoers
在root用戶下面添加一個當前賬戶:
切換用戶:sudo -s
6. 手動部署
idea安裝docker和k8s插件,docker file和k8s部署文件有語法高亮。
Dockerfile:
OK,在利用Jenkins自動化部署之前,我們看看怎么把應用構建成鏡像,推送鏡像,拉取鏡像,然后分別用Docker運行應用和K8S里部署應用。
Jenkins編譯完成后,到Jenkins的工作目錄下可以看到我們的Jar包和相關的項目文件,我們把相關文件scp到K8S的那台機器上:
cd /var/lib/jenkins/workspace/k8s-cicd-demo/target
scp k8s-cicd-demo-0.0.1-SNAPSHOT.jar root@192.168.0.10:/usr/local/k8s-workspace/docker/
cd /var/lib/jenkins/workspace/k8s-cicd-demo/deployment
scp -r docker root@192.168.0.10:/usr/local/k8s-workspace/
在Docker file目錄下執行:
docker build -t registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 . (不要忽略最后一個點),然后可以看到鏡像已經生成啦:
sudo docker tag 510093dbe4bf registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##打tag
sudo docker login --username=465230373@qq.com registry.cn-hangzhou.aliyuncs.com --password Milenfan123 #登陸阿里雲鏡像服務
sudo docker push registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##推送鏡像
https://cr.console.aliyun.com/repository/cn-hangzhou/k8simages_jo ##登陸阿里雲查看鏡像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##拉取鏡像
docker run -d --name k8s-cicd-demo -p 10000:9999 registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##docker運行服務(如果容器已存在可以用docker rm k8s-cicd-demo 刪除)
docker logs -f --tail=5000 9bb33e4b0ced ##查看日志
已經看到已經運行了,訪問結果如下:
到目前為止,Docker運行應用沒有問題,現在我們先把這個容器刪除掉:
docker stop k8s-cicd-demo ##停止容器
docker rm k8s-cicd-demo ##刪除容器
好,現在繼續看看部署到K8S的情況,我們切換到k8s目錄,我的部署文件是這樣的:
kubectl create -f deployment.yaml ##部署應用
kubectl create -f service.yaml ##暴露服務
kubectl get deployment -o wide ##查看已經部署的應用
kubectl get svc -o wide ##查看已經暴露的服務
嘗試訪問一下服務:
到此為止,手動把應用部署到K8S也沒有問題!如果部署過程中有什么問題,下面命令可能有用哈,先留着:
kubectl get deployment -o wide --查看已經部署的應用
kubectl delete deployment k8s-cicd-demo-deployment --刪除deployment
kubectl get svc -o wide --查看service
kubectl delete svc k8s-cicd-demo-service --刪除服務
kubectl describe svc k8s-cicd-demo-service --查看服務
kubectl get pod -o wide --查看pod
kubectl describe pod k8s-cicd-demo-deployment-7f56f796f8-f6rrk --查看pod
kubectl logs -f k8s-cicd-demo-deployment-79c66b55f5-6xrzk --查看pod日志
kubectl get endpoints -o wide --查看endpoint
7.自動部署
既然手動部署沒有問題,那我們繼續看怎么實現自動部署吧,這時候主要的功夫應該是寫Shell腳本了吧。。。emm,自動部署需要在項目構建完成后執行相關的腳本:
下面主要看一下k8s-cd.sh這個腳本
最后,由於跑BDD之前需要把項目部署好,為了不寫那么多shell腳本,最終修改了Jenkins配置,並且由一個Jenkins Job變成了兩個,下面是k8s-cicd-demo的主要配置:
下面是對應的k8s-cicd-demo-ft的主要配置:
最后,看一下最終結果吧:
點擊k8s-cicd-demo-ft可以查看測試的結果:
打開瀏覽器訪問:
至此,一個簡單的CICD的大概流程已經介紹完畢,也成功實現了這個demo項目的自動化部署以及自動化測試。
更多信息關注公眾號:
推薦一款開源的項目管理,績效考核(日報,周報,月報)工具:http://www.itproject-manager.com/