您好,登錄后才能下訂單哦!
本章的主題是Jenkins自動化構(gòu)建docker鏡像,并部署到k8s集群,后面我們還會講到Jenkins一鍵發(fā)布到k8s集群。
安裝jenkins需要使用tomcat去把應(yīng)用跑起來
1.清理所有的default資源和其他namespace下的資源
[root@master ~]# kubectl get all --all-namespaces
kubectl delete svc --all;kubectl delete pod --all
2.下載gitlab安裝包
在node2上,進(jìn)行如下操作
wget xxx
安裝:yum localinstall xxx
配置:vim /etc/gitlab/gitlab.rb,修改以下兩行
external_url 'http://192.168.187.102'
prometheus_monitoring['enable'] = flase
重新啟動:
3.在gitlab上創(chuàng)建倉庫并上傳代碼
git add .
git commit -m 'first update'
git push -u origin master
4.安裝Jenkins
在node1上,進(jìn)行如下操作
安裝JDK,安裝tomcat,安裝jenkins
[root@node1 ~]# rpm -ivh jdk-12.0.2_linux-x64_bin.rpm
warning: jdk-12.0.2_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jdk-12.0.2-2000:12.0.2-ga ################################# [100%]
[root@node1 ~]# java --version
java 12.0.2 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)
解壓tomcat包到指定文件夾
tar xf apache-tomcat-8.5.45.tar.gz -C /app
拷貝jenkins.war包到tomcat的webapps目錄下,并啟動tomcat.由于我們采用的安裝方式是基于tomcat進(jìn)行安裝的,那么啟動tomcat就會自動啟動jenkins。
[root@node1 ~]# cp jenkins.war /app/apache-tomcat-8.5.45/webapps/
[root@node1 ~]# ls
! anaconda-ks.cfg apache-tomcat-8.5.45.tar.gz jdk-12.0.2_linux-x64_bin.rpm jenkins.war original-ks.cfg
[root@node1 webapps]# /app/apache-tomcat-8.5.45/bin/startup.sh
[root@node1 webapps]# netstat -lntup | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 81725/java
啟動會,在瀏覽器上登錄http://192.168.187.101:8080/jenkins然后需要輸入原始密碼,將以下文件里的密碼copy到此處即可。
[root@node1 secrets]# vim initialAdminPassword
[root@node1 secrets]# pwd
/root/.jenkins/secrets
接下來會出現(xiàn)讓你選擇啟動模塊的界面,直接跳過進(jìn)入下一步
在安裝有jenkins的機(jī)器上從gitlab拉取代碼,正常情況下會成功拉取
以下是Jenkins上拉取代碼成功的截圖
5.Jenkins自動化構(gòu)建docker鏡像
在生產(chǎn)環(huán)境中,當(dāng)我們在jenkins上點(diǎn)擊立即構(gòu)建,會立即打包好一個docker鏡像。
這也是我們的最終目標(biāo):
我們許多人的通常做法是在gitlab上提交代碼時同時編輯一個dockerfile文件,當(dāng)在jenkins上點(diǎn)擊立即構(gòu)建時,由于有這個dockerfile存在,jenkins會自動執(zhí)行docker build從而完成構(gòu)建一個docker鏡像的過程
a.先在node2上創(chuàng)建dockerfile文件,并編輯一個文件在執(zhí)行時不打包這個文件
vi dockerfile
FROM 192.168.187.100:5000/nginx:1.13
ADD . /usr/share/nginx/html #把代碼上傳到這個目錄下
b.在jenkins上把docker build,docker push的命令復(fù)制到配置-構(gòu)建-界面上,當(dāng)點(diǎn)擊立即構(gòu)建時便會執(zhí)行這些命令
docker build
docker push 192.168.187.100:5000/
執(zhí)行完之后可以docker images查看鏡像是否會在私有倉庫的鏡像池里
6.優(yōu)化構(gòu)建里的一些配置
首先如果多次構(gòu)建,又希望保存歷史版本不希望舊版本被覆蓋掉,那么我們需要設(shè)置版本變量
在配置-構(gòu)建這里,將版本號改為一個變量,這樣之后每構(gòu)建一次版本會發(fā)生變化
其次,如果代碼沒發(fā)生變化,我們不希望執(zhí)行再次構(gòu)建的動作,那么我們需要做一次check,檢查代碼是否有更新,是否有新增構(gòu)建;這里我們用commit id來作為判斷依據(jù),如果commit id與上次一樣則不再次構(gòu)建,如果不一致則執(zhí)行構(gòu)建命令。
7.k8s集群部署項(xiàng)目
7.1.創(chuàng)建項(xiàng)目資源
a.創(chuàng)建一個deployment,以之前上傳到本地私有倉庫的小鳥鏡像為源
kubectl run
b.創(chuàng)建一個svc,給小鳥這個應(yīng)用提供外部訪問的端口
kubectl expose
7.2.手動實(shí)現(xiàn)k8s里docker的升級和回滾
kubectl set image deploy
kubectl rollout undo deploy
7.3.利用jenkins實(shí)現(xiàn)k8s里docker的升級和回滾
把上面的升級和回滾操作集成到配置-構(gòu)建配置里,讓jenkins來實(shí)現(xiàn)docker的升級和回滾;
我們可以做一個實(shí)驗(yàn),在gitlab里新建一個html文件并將其構(gòu)建后上傳代碼至私有倉庫。
然后通過jenkins里的立即構(gòu)建功能實(shí)現(xiàn)k8s里docker資源一鍵更新,部署或者發(fā)布。
kubectl -s 192.168.187.100:8080 set image deploy xiaoniao:
問題:
1.jenkins安裝完成后初始化啟動一直很慢,顯示加載中,修改了配置也不生效。
2.jenkins的一鍵構(gòu)建完成k8s里docker資源的更新與發(fā)布,很牛逼,希望有機(jī)會能了解其在生產(chǎn)環(huán)境中的應(yīng)用狀況
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。