k8s-jenkins持續釋出tomcat專案
一、需求
這個實驗前期後後搞了很久(公司經常插一些別的事過來,然後自己比較懶,再加上自己知識不夠紮實)。二進位制部署完k8s叢集就開始做jenkins持續整合了。
參考這個語雀的部署連結:https://www.yuque.com/duduniao/k8s/gp8n04【3. 交付Jenkins到K8S 開始到maven結束】。
部署過程中遇到很多問題 :jenkins映象要從版本2.190.3換為blueocean(pipeline用),然後gitlab拉不了程式碼。。。【我的心酸血淚史:https://www.cnblogs.com/windysai/p/14161282.html 】
(想想,感覺自己做什麼都不太成功哇,感謝有個小夥經常幫我解決關鍵的問題,但我也有時也蠻討厭他的,“你除了xxx做成功其他實驗都沒成功過,或者xxx你做了好久了哦”,可能他覺得是句玩笑,也確實是個事實,但還是覺得不太好受滴~~~~控制不了別人的嘴,只能改變自己心態咯——》 付出加倍的努力哇:人家1小時搞掂的活,我花2個小時或者更多,應該。。。應該,也能做出來的吧,哈哈哈,思維有時跟不上呢,默默給自己打氣,fighting~~~努力,加油,好好學習)
說回正題吧,之前解決那個利用configmap覆蓋tomcat專案資料庫配置檔案的問題【https://www.cnblogs.com/windysai/p/14305441.html】(是那個說我實驗經常做不成功的傢伙幫了我,這人真是讓我又愛又恨),然後回頭搞完這個流程吧(不然心底總覺得有根刺),公司辦公電腦開了4臺虛機做不了(就12G記憶體,拉映象的時候卡死不動),然後我把這環境搬到家裡(16G記憶體),勉強能做。然鵝,家裡那個jenkins叢集環境最近抽風了!!!jenkins登入連續幾天報錯:bad gateway,jenkins日誌沒有找到報錯,唯一比較像錯誤的是kubelet的日誌。。。。
jenkins 開啟頁面及對應日誌(昨晚搞到我11點16分,才去洗洗睡的(這個時間要再加8小時)):
kubelet的日誌,還沒去研究。
然後某天我領導在我工作日誌上評論,叫我把這個實驗在公司的測試平臺跑通釋出,想想也挺有道理,畢竟公司環境都有了,配置不用愁。大致介紹下這個環境(這個是公司前運維部署的,單節點master,2個工作節點,服務那列我寫的比較簡略)
主機名 |
IP |
配置 |
服務 |
master1(單節點,沒做叢集) |
192.168.0.233 |
4核CPU,10G記憶體,150G儲存 |
Docker、Harbor、kubernetes 1.10.1服務 |
slave01(工作節點1) |
192.168.0.243 |
8核CPU,16G記憶體,100G儲存 |
Docker |
slave02(工作節點2) |
192.168.0.244 |
8核CPU,16G記憶體,100G儲存 |
Docker |
當我終於看到這個頁面,我是很感動的(我等了你很久呢)
二、問題解決
說明:maven是從我的虛機複製出來的,因為構建公司專案要很多依賴包。
還是使用tomcat基礎映象:tomcat:8.5.31(我強調下,大家看這篇文章的時候一定要先看我這篇:https://www.cnblogs.com/windysai/p/14305441.html,因為我就是從這裡改的)
## 1、下載基礎映象到本地: tomcat:8.5.31 ——》最原始的映象
docker pull tomcat:8.5.31
##2、構造tomcat映象(可以理解為預處理)
就是加了啟動指令碼進去,刪除webapps下的檔案等
(1)Dockerfile
(刪掉了複製war包到映象那句,因為我要用jenkins構建的war包,不能寫死的!結合後面的pipeline程式碼一起看)
From tomcat:8.5.31 #上面docker pull已拷到本地
COPY wdtz-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war #去掉
(2)runtomcat.sh 跟之前文章一樣,保持不變
(3)新增構建tomcat映象並上傳到harbor:v8.5.31 ——》 jenkins釋出用到
## 3、編寫交付給k8s的資源配置檔案:configmap.yaml,deployment.yaml,service.yaml
(1)configmap.yaml:保持不變
(2)deployment.yaml:spec.template.containers.image 改成:
image: 192.168.0.233/test/tomcat-deploy:v1 ——》jenkins釋出用
(3)service.yaml:spec.ports.nodePort: 30031 ——》上篇文章的埠用不了,有範圍限制
## 4、jenkins配置部分(直接貼程式碼了,因為準備洗洗睡)
1 pipeline { 2 agent any 3 environment { 4 GIT_URL="拉取的專案程式碼地址" 5 BRANCH="分支名" 6 BUILD_PATH="/root/k8s/" 7 } 8 stages { 9 stage('拉取程式碼') { 10 steps{ 11 echo "git pull。。。" 12 git branch: "${BRANCH}", credentialsId: '拉取gitlab程式碼的憑證', url: "${GIT_URL}" 13 } 14 } 15 stage('程式碼編譯') { 16 steps{ 17 echo "maven build 。。。" 18 sh "/root/ljy_test/maven-3.6.2-8u232/bin/mvn clean install -e -Dmaven.test.skip=true -P pro -f pom.xml" 19 } 20 } 21 stage('構建映象') { 22 steps { 23 echo "build docker tomcat deploy image。。。" 24 sh """ 25 echo ' 26 From 192.168.0.233/test/tomcat:v8.5.31 27 LABEL maintainer ljy 28 COPY ./target/wdtz-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war 29 ' > Dockerfile 30 docker build -t 192.168.0.233/test/tomcat-deploy:v1 . 31 docker push 192.168.0.233/test/tomcat-deploy:v1 32 """ 33 } 34 } 35 36 stage('部署到k8s節點'){ 37 steps{ 38 echo "deploy project to k8s node。。。" 39 sh "/usr/bin/kubectl apply -f /root/ljy_test/tomcat/configmap.yaml" 40 sh "/usr/bin/kubectl apply -f /root/ljy_test/tomcat/deployment.yaml" 41 sh "/usr/bin/kubectl apply -f /root/ljy_test/tomcat/service.yaml" 42 } 43 } 44 } 45 }
三、實驗結果
訪問:http://192.168.0.233:30031/report/notice.html