教你如何用Jenkins自動化部署項目(教程,從零到搭建完成)

  • 2019 年 10 月 6 日
  • 筆記

教你如何用Jenkins自動化部署項目(教程,從零到搭建完成)

置頂 2018年08月11日 21:18:18 龍之竹 閱讀數 94080更多

分類專欄: web項目部署

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/qq_37372007/article/details/81586751

      最近在實習中接觸了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 "youremail@abc.com"

    可以不設置密鑰密碼直接按三次回車。 把家目錄中生成的公鑰內容複製到github或其他倉庫上。    

    安裝maven的目的是通過項目中的pom.xml文件自動解決項目依賴問題,構建項目。linux中通過wget+下載鏈接下載maven的zip包然後解壓即可。配置maven環境變數:


  1. vim /etc/profile
  2. //在這個文件末尾加上
  3. export MAVEN_HOME=/root/maven3.4.5
  4. export PATH=$MAVEN_HOME/bin:$PATH
  5. //保存後在命令行輸入,啟動配置
  6. . /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為我要自動構建的項目名:


  1. #!/usr/bin/env bash
  2. #編譯+部署項目站點
  3. #需要配置如下參數
  4. # 項目路徑, 在Execute Shell中配置項目路徑, pwd 就可以獲得該項目路徑
  5. # export PROJ_PATH=這個jenkins任務在部署機器上的路徑
  6. # 輸入你的環境上tomcat的全路徑
  7. # export TOMCAT_APP_PATH=tomcat在部署機器上的路徑
  8. ### base 函數
  9. killTomcat()
  10. {
  11. #pid=`ps -ef|grep tomcat|grep java|awk '{print $2}'`
  12. #echo "tomcat Id list :$pid"
  13. #if [ "$pid" = "" ]
  14. #then
  15. # echo "no tomcat pid alive"
  16. #else
  17. # kill -9 $pid
  18. #fi
  19. #上面注釋的或者下面的
  20. cd $TOMCAT_APP_PATH/bin
  21. sh shutdown.sh
  22. }
  23. cd $PROJ_PATH/my-scrum
  24. mvn clean install
  25. # 停tomcat
  26. killTomcat
  27. # 刪除原有工程
  28. rm -rf $TOMCAT_APP_PATH/webapps/ROOT
  29. rm -f $TOMCAT_APP_PATH/webapps/ROOT.war
  30. rm -f $TOMCAT_APP_PATH/webapps/my-scrum.war
  31. # 複製新的工程到tomcat上
  32. cp $PROJ_PATH/scrum/target/order.war $TOMCAT_APP_PATH/webapps/
  33. cd $TOMCAT_APP_PATH/webapps/
  34. mv my-scrum.war ROOT.war
  35. # 啟動Tomcat
  36. cd $TOMCAT_APP_PATH/
  37. 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)


  1. #當jenkins進程結束後新開的tomcat進程不被殺死
  2. BUILD_ID=DONTKILLME
  3. #載入變數
  4. . /etc/profile
  5. #配置運行參數
  6. #PROJ_PATH為設置的jenkins目錄的執行任務目錄
  7. export PROJ_PATH=`pwd`
  8. #配置tomcat所在目錄
  9. export TOMCAT_APP_PATH=/root/tomcats/tomcat-my-scrum
  10. #執行寫好的自動化部署腳本
  11. 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文件中,將


  1. <Server port="8005" shutdown="SHUTDOWN">
  2. <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  3. <!-- Security listener. Documentation at /docs/config/listeners.html
  4. <Listener className="org.apache.catalina.security.SecurityListener" />
  5. -->

中的8005埠改為不同的埠,就不會一個tomcat關閉,所有的tomcat都被關閉了

六、以後可以在linux伺服器中安裝多個tomcat,來部署不同的項目,分別使用不同的埠,如我喜歡用8081,8082,8083等埠來解決多個tomcat埠衝突問題(在tomcat的conf目錄下的server.xml中修改即可,默認為8080)。然後可以用jenkins來管理這些tomcat的自動化部署啦。

七、謝謝閱讀,歡迎交流!

(adsbygoogle = window.adsbygoogle || []).push({});

Exit mobile version