Kubernetes叢集的Jenkins CI/CD版本上線流程部署
最近在實習中接觸了jenkins這個東西,所以花點時間瞭解了下。它可以在程式碼上傳倉庫(如github,gitee,gitlab)後,在jenkins(一個網站介面)中通過獲取程式碼倉庫中最新程式碼,進行自動化部署,而省去手動打包、上傳伺服器、部署這一系列步驟,非常方便。
下面教程分為以下幾個部分:
一、在你的本地電腦或者linux伺服器上下載安裝jenkins:
jenkins下載地址:https://jenkins.io/ 下載網站的war包版本就好了
下載完後把它部署到你的tomcat上執行:放到tomcat的webapps目錄下,啟動tomcat(windows下雙擊startup.bat或者linux下執行sh startup.sh),然後通過瀏覽器訪問,如我的電腦上訪問:localhost:8080/jenkins 。啟動後的介面如下:
然後到提示的檔案中把裡面的文字複製出來填到管理員密碼中。
接著如果是在本地電腦跑,可能會出現:該jenkins例項似乎已離線 提示,如果出現,是因為本地https訪問不了的原因。在瀏覽器中另開啟一個介面http://localhost:8080/pluginManager/advanced,把升級站點中的url中的https改為http,儲存更新。然後關掉tomcat伺服器重啟,就可以聯網了。
接下來選擇安裝推薦的外掛,這個需要一定的時間。最後額外推薦安裝兩個外掛,在系統管理中可以安裝外掛:
1、 Rebuilder
2、 Safe Restart
二、在linux伺服器中安裝git, maven,建立一個jenkens目錄,配置git的公鑰到你的 github上,這些步驟是使用jenkins的前提。
安裝git的目的是在自動化部署前實時從git遠端倉庫中拉取最新的程式碼。在linux(我用的是centos系統)安裝git:
yum install git
生成金鑰:
ssh-keygen -t rsa -C "[email protected]"
可以不設定金鑰密碼直接按三次回車。 把家目錄中生成的公鑰內容複製到github或其他倉庫上。
安裝maven的目的是通過專案中的pom.xml檔案自動解決專案依賴問題,構建專案。linux中通過wget+下載連結下載maven的zip包然後解壓即可。配置maven環境變數:
- vim /etc/profile
- //在這個檔案末尾加上
- export MAVEN_HOME=/root/maven3.4.5
- export PATH=$MAVEN_HOME/bin:$PATH
- //儲存後在命令列輸入,啟動配置
- . /etc/profile
建立jenkins目錄,用來儲存拉取下來的專案程式碼等。
三、將Linux伺服器註冊到Jenkins上
1、開啟伺服器上的ssh服務,可通過 netstat -anp | grep :22命令檢視是否開啟
2、先來測試一下怎麼在jenkins中操作遠端伺服器
在jenkins中選擇系統管理——》新建節點
其中遠端工作目錄即你在Linux上建立的jenkins目錄。在Credentials新增一個遠端使用者,輸入你的遠端機器使用者名稱和密碼儲存。
點選TestEnv,啟動代理。
在全域性工具配置中配置git命令:
3、自動化部署過程原理:
所以需要編寫一個shell指令碼來執行這個過程。
具體的建立Jenkins任務的過程為
1.建立jenkins任務
2.填寫Server資訊
3.配置git引數
4.填寫構建語句(shell指令碼),實現自動部署。
四、建立自動化部署任務
1、編寫shell部署指令碼deploy.sh,並放到linux伺服器中的jenkins目錄下,在該目錄下通過touch deploy.sh建立一個指令碼,把下面的指令碼複製到裡面即可(到時每次自動部署都會執行它),指令碼中的my-scrum為我要自動構建的專案名:
- #編譯+部署專案站點
- #需要配置如下引數
- # 專案路徑, 在Execute Shell中配置專案路徑, pwd 就可以獲得該專案路徑
- # export PROJ_PATH=這個jenkins任務在部署機器上的路徑
- # 輸入你的環境上tomcat的全路徑
- # export TOMCAT_APP_PATH=tomcat在部署機器上的路徑
- ### base 函式
- killTomcat()
- {
- #pid=`ps -ef|grep tomcat|grep java|awk '{print $2}'`
- #echo "tomcat Id list :$pid"
- #if [ "$pid" = "" ]
- #then
- # echo "no tomcat pid alive"
- #else
- # kill -9 $pid
- #fi
- #上面註釋的或者下面的
- cd $TOMCAT_APP_PATH/bin
- sh shutdown.sh
- }
- cd $PROJ_PATH/my-scrum
- mvn clean install
- # 停tomcat
- killTomcat
- # 刪除原有工程
- rm -rf $TOMCAT_APP_PATH/webapps/ROOT
- rm -f $TOMCAT_APP_PATH/webapps/ROOT.war
- rm -f $TOMCAT_APP_PATH/webapps/my-scrum.war
- # 複製新的工程到tomcat上
- cp $PROJ_PATH/scrum/target/order.war $TOMCAT_APP_PATH/webapps/
- cd $TOMCAT_APP_PATH/webapps/
- mv my-scrum.war ROOT.war
- # 啟動Tomcat
- cd $TOMCAT_APP_PATH/
- sh bin/startup.sh
2、在jenkins上點選新建一個任務,填好任務名,填寫執行的節點(上文中新建節點時建立的):
3、點選原始碼管理,填寫github(或gitlab等)地址:
4、點選add,選擇check out to a sub-directory ,新增原始碼下載到jenkins目錄下的指定目錄(可以命名為你的專案名):
5、填寫構建任務時的shell指令碼,然後儲存,點選立即構建完成自動構建。(這裡有一個坑,一定要給tomcat下所有sh檔案加上x許可權才能啟動tomcat成功,具體為在tomcat目錄上層執行chmod a+x -R tomcat目錄或者在tomcat的bin目錄下執行chmod +x *.sh)
- #當jenkins程序結束後新開的tomcat程序不被殺死
- BUILD_ID=DONTKILLME
- #載入變數
- . /etc/profile
- #配置執行引數
- #PROJ_PATH為設定的jenkins目錄的執行任務目錄
- export PROJ_PATH=`pwd`
- #配置tomcat所在目錄
- export TOMCAT_APP_PATH=/root/tomcats/tomcat-my-scrum
- #執行寫好的自動化部署指令碼
- sh /root/jenkins/deploy.sh
6、自動化構建成功:
7、後續程式碼如果有改動,只要push到github或者gitlab等上,在jenkins介面中再次執行構建任務就可以了,非常方便,自動化部署,再也不用手動上傳專案到伺服器了。
五、解決一個tomcat關閉,所有tomcat都被關閉了的問題(如果你的jenkins也是安裝的伺服器上的其中一個tomcat中,就可能被莫名殺掉)
這是因為所有的tomcat的關閉指令碼(shutdown.sh或者說catalina.sh)都預設監聽的是8005埠。只要進去tomcat目錄下的conf目錄下的server.xml檔案中,將
- <Server port="8005" shutdown="SHUTDOWN">
- <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
- <!-- Security listener. Documentation at /docs/config/listeners.html
- <Listener className="org.apache.catalina.security.SecurityListener" />
- -->
中的8005埠改為不同的埠,就不會一個tomcat關閉,所有的tomcat都被關閉了