1. 程式人生 > >jenkins自動部署應用到Tomcat,編譯後shell指令碼的簡單示例

jenkins自動部署應用到Tomcat,編譯後shell指令碼的簡單示例

1.先配置好jenkins需要用到的其他外部元件 jdk,maven,git/svn

   安裝git: yum install git

  git地址使用命令查詢 whereis git
  這裡寫圖片描述
  maven jdk 安裝好後配置好環境變數 自行百度

  查詢環境變數中的jdk和maven地址
  這裡寫圖片描述
   進入配置階段
   這裡寫圖片描述
    1.1 進入系統設定- 全域性工具配置中配置 jdk maven git 不要勾選自動安裝

   jdk maven 使用的是環境變數中的地址
   這裡寫圖片描述
   這裡寫圖片描述
   2.開始新建一個jenkins任務
   這裡寫圖片描述


   2.1 general

  這裡是一些通用的設定, 丟棄舊的構建 多次構建又不手動清除 會生成很多檔案 ,佔用磁碟空間 這裡的丟棄舊的構建的配置大家按需配置即可
  這裡寫圖片描述
  2.2原始碼管理
  這裡寫圖片描述
   版本控制這裡使用的是git git的地址填進去 點選Add 新增 git的賬號密碼 然後在下拉框中選擇剛剛新增的賬號密碼
   這裡寫圖片描述
   這裡寫圖片描述
   選擇了正確的git賬號密碼 紅色的報錯資訊就會消失 下面也會顯示git程式碼的主幹 如果需要的是其中的分支 修改成對應的分支名稱就行
   這裡寫圖片描述
   2.3構建觸發器
   這裡寫圖片描述
   這裡一般預設的觸發器就行 如果你需要定時構建 比如每隔一段時間重新部署 或者每隔一段時間檢測有沒有提交 有提交就部署
   這裡寫圖片描述


    定時構建 “日程表”格式為 和cron表示式一樣 如果你想實現什麼 對應著去百度就行
    ## 每行由 5 個值組成(空格或TAB分隔),分別表示分(0-59)、時(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=週日)
“M,N” 表示M和N;”M-N” 表示範圍[M,N];”M-N/X” 表示範圍[M,N]內每隔X;”*/X” 表示整個範圍內每隔X
前面提到的M/N/X的值都可以用H(意為Hash)代替,雜湊值起到隨機值的效果,且同一專案取值穩定,這對於專案多時分散壓力很有用。
H/10 H(0-8) * * 1-5 ## 觸發時間: 工作日、Hour為0~8按雜湊隨機、Minute以10為間隔
H/10 H * * 0,6,7 ## 觸發時間: 週末、Hour為全天按雜湊隨機、Minute以10為間隔
“日程表”修改後,下方會給出下次執行時間點的預告。

  2.4 構建環境和pre steps
  這裡使用的是預設的,有需要的對應著去查詢資料
  ![這裡寫圖片描述](https://img-blog.csdn.net/20180911155538393?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podWd1YW5naGFsbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  2.5 Build 
  ![這裡寫圖片描述](https://img-blog.csdn.net/20180911155607547?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podWd1YW5naGFsbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  因為 本文中專案結構  圖中紅框框出來的都是一個個子專案
  ![這裡寫圖片描述](https://img-blog.csdn.net/20180911155647110?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podWd1YW5naGFsbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  這裡我只想build 其中的mobile模組  就需要配置 -pl  mobile -am  

  加上其他的mvn打包的命令 clean package -pl mobile -am -Dmaven.test.skip=true

 2.6 構建設定  構建後操作  

  這裡可以設定構建後郵件通知
  這裡寫圖片描述
  2.7 Post Steps

  構建完成後操作 這裡使用的執行shell命令
 
 這裡寫圖片描述 
 這裡放一個shell示例, 容器是tomcat

  思路: 先查對應的tomcat時候啟動, 啟動了就kill掉, 然後刪除webapps中的包, 把jenkins編譯的包複製到對應的容器, 重新命名包 , 啟動容器
  

!/bin

kill tomcat pid
有錯的shell

pidlist=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
function stop(){
if [ “$pidlist” == “” ]
then
echo “—-tomcat_mobile 已經關閉—-“

else
echo “tomcat_mobile 程序號 :pidlistkill9pidlist
echo “KILL $pidlist:”
fi
}

stop
pidlist2=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
if [ “$pidlist2” == “” ]
then
echo “—-關閉tomcat_mobile成功—-”
else
echo “—-關閉tomcat_mobile失敗—-”
fi

rm -rf /usr/local/tomcat_mobile/webapps/ROOT*
cp -r /var/lib/jenkins/workspace/baiyangjinrong-mobile/mobile/target/mobile.war /usr/local/tomcat_mobile/webapps
sleep 3s
mv /usr/local/tomcat_mobile/webapps/mobile.war /usr/local/tomcat_mobile/webapps/ROOT.war
cd /usr/local/tomcat_mobile/bin
./startup.sh
問題1:上述shell指令碼執行後 肯定會出現tomcat沒有啟動的情況
  1.這裡如果tomcat和jenkins 在同一臺linux上可以 加上 export BUILD_ID=tomcat_mobile_build_id
    原因是: jenkins在執行sh指令碼的時候,如果指令碼中有啟動後臺程序的情況,例如tomcat的關閉和啟動,jenkins在job構建結束之後,會kill所有的腳本里面衍生出的子程序。修改環境變數BUILD_ID的值,這樣,衍生出來的子程序就不會被kill了
  2.tomcat和jenkins不在一臺linux上
  
    假如部署jenkins的機器是A,部署tomcat的機器是B。那可以在A機器上寫一個指令碼,把需要在B機器上執行的命令封裝在A機器上的這個腳本里面,這樣也能保證衍生程序正確執行結束。
    這裡寫圖片描述
    就是相當於把上面的shell寫到一個sh檔案中 jenkins執行這個sh檔案
    這裡寫圖片描述
   因為我便是jenkins和Tomcat在同一臺linux上 所以這裡就沒有把shell指令碼寫在sh檔案中
   

!/bin/sh

kill tomcat pid
這句尤為重要
export BUILD_ID=tomcat_mobile_build_id

1.關閉tomcat
pidlist=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
function stop(){
if [ “$pidlist” == “” ]
then
echo “—-tomcat 已經關閉—-“

else
echo “tomcat程序號 :pidlistkill9pidlist
echo “KILL $pidlist:”
fi
}

stop
pidlist2=ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'
if [ “$pidlist2” == “” ]
then
echo “—-關閉tomcat成功—-”
else
echo “—-關閉tomcat失敗—-”
fi

2.移除原來tomcat中webapps中的專案資料夾
rm -rf /usr/local/tomcat_mobile/webapps/ROOT*
3.複製jenkins生成的war包到tomcat中webapps中
cp -r /var/lib/jenkins/workspace/baiyangjinrong-mobile/mobile/target/mobile.war /usr/local/tomcat_mobile/webapps
sleep 3s
4.修改war包的名稱
mv /usr/local/tomcat_mobile/webapps/mobile.war /usr/local/tomcat_mobile/webapps/ROOT.war
5.啟動tomcat
cd /usr/local/tomcat_mobile/bin
./startup.sh

2.8 可能出現的問題:

  1. 這裡如果出現如下的問題 就是因為linux上沒有安裝git
  這裡寫圖片描述
  安裝 yum install git 後去全域性工具配置你配置好git的路徑

  2. jenkins部署失敗 首先去看對應任務的日誌

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
從日誌中可以看出來這裡jenkins 編譯是成功的 但是在複製war的時候報錯, 圖中是因為不小心把空格敲成換行了
這裡寫圖片描述
歡迎工作一到五年的Java工程師朋友們加入Java架構開發:855801563
本群提供免費的學習指導 架構資料 以及免費的解答

不懂得問題都可以在本群提出來 之後還會有職業生涯規劃以及面試指導
同時大家可以多多關注一下小編 純乾貨 大家一起學習進步