Jenkins部署Springboot應用到K8S


更多信息請查看公眾號原文:https://mp.weixin.qq.com/s/Q3knDEa6etAM5LZ-ULAeSA

​上一章節已經完成了一個最簡單的應用的開發,現在看看怎么把這個應用部署到K8S.

 

  1. 檢查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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM