jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

jenkins的安裝這裡就不做描述了,很簡單的 百度搜索一下即可

這裡安裝的jenkins-2.39-1.1

wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm 
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key
sudo yum -y install jenkins-2.39-1.1.noarch.rpm
安裝完後防火牆放行端口

安裝不是重點 重點是去配置jenkins

如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。

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

安裝git: yum install git

git地址使用命令查詢 whereis git

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

maven jdk 安裝好後配置好環境變量 自行百度

查詢環境變量中的jdk和maven地址

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

啟動 停止 重啟

service jenkins start

service jenkins stop

service jenkins restart

進入配置階段

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

1.1 進入系統設置- 全局工具配置中配置 jdk maven git 不要勾選自動安裝

jdk maven 使用的是環境變量中的地址

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

2.開始新建一個jenkins任務

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

2.1 general

這裡是一些通用的設置, 丟棄舊的構建 多次構建又不手動清除 會生成很多文件 ,佔用磁盤空間 這裡的丟棄舊的構建的配置大家按需配置即可

如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

2.2源碼管理

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

版本控制這裡使用的是git git的地址填進去 點擊Add 添加 git的賬號密碼 然後在下拉框中選擇剛剛新增的賬號密碼

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

選擇了正確的git賬號密碼 紅色的報錯信息就會消失 下面也會顯示git代碼的主幹 如果需要的是其中的分支 修改成對應的分支名稱就行

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

2.3構建觸發器

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

這裡一般默認的觸發器就行 如果你需要定時構建 比如每隔一段時間重新部署 或者每隔一段時間檢測有沒有提交 有提交就部署

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

定時構建 “日程表”格式為 和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

這裡使用的是默認的,有需要的對應著去查詢資料

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

2.5 Build

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

因為 本文中項目結構 圖中紅框框出來的都是一個個子項目

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

這裡我只想build 其中的mobile模塊 就需要配置 -pl mobile -am

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

2.6 構建設置 構建後操作

這裡可以設置構建後郵件通知

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

-------------------------------------------------------------------------------------------------------最重要的一部分當然要有華麗的分割線-----------------------------------------------------------------------------------------------------------------------------------------

2.7 Post Steps

構建完成後操作 這裡使用的執行shell命令

shell腳本里面寫的就是無非就是把編譯好的war包放到對應的容器中去 然後啟動容器

最關鍵得地方, 不同的項目.不同的容器這裡的shell腳本肯定是有不一樣,網絡上的這類shell只能參考,具體還得自己動手去寫

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

這裡放一個shell示例, 容器是tomcat

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

如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。

#!/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 進程號 :$pidlist"
kill -9 $pidlist
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機器上的這個腳本里面,這樣也能保證衍生進程正確執行結束。
jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例


就是相當於把上面的shell寫到一個sh文件中 jenkins執行這個sh文件

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

因為我便是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進程號 :$pidlist"
kill -9 $pidlist
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

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

安裝 yum install git 後去全局工具配置你配置好git的路徑

如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。

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

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例

從日誌中可以看出來這裡jenkins 編譯是成功的 但是在複製war的時候報錯, 圖中是因為不小心把空格敲成換行了

jenkins自動部署應用到tomcat中,編譯後shell腳本的簡單示例


分享到:


相關文章: