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
maven jdk 安裝好後配置好環境變量 自行百度
查詢環境變量中的jdk和maven地址
啟動 停止 重啟
service jenkins start
service jenkins stop
service jenkins restart
進入配置階段
1.1 進入系統設置- 全局工具配置中配置 jdk maven git 不要勾選自動安裝
jdk maven 使用的是環境變量中的地址
2.開始新建一個jenkins任務
2.1 general
這裡是一些通用的設置, 丟棄舊的構建 多次構建又不手動清除 會生成很多文件 ,佔用磁盤空間 這裡的丟棄舊的構建的配置大家按需配置即可
如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
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
這裡使用的是默認的,有需要的對應著去查詢資料
2.5 Build
因為 本文中項目結構 圖中紅框框出來的都是一個個子項目
這裡我只想build 其中的mobile模塊 就需要配置 -pl mobile -am
加上其他的mvn打包的命令 clean package -pl mobile -am -Dmaven.test.skip=true
2.6 構建設置 構建後操作
這裡可以設置構建後郵件通知
-------------------------------------------------------------------------------------------------------最重要的一部分當然要有華麗的分割線-----------------------------------------------------------------------------------------------------------------------------------------
2.7 Post Steps
構建完成後操作 這裡使用的執行shell命令
shell腳本里面寫的就是無非就是把編譯好的war包放到對應的容器中去 然後啟動容器
最關鍵得地方, 不同的項目.不同的容器這裡的shell腳本肯定是有不一樣,網絡上的這類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機器上的這個腳本里面,這樣也能保證衍生進程正確執行結束。
就是相當於把上面的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進程號 :$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
安裝 yum install git 後去全局工具配置你配置好git的路徑
如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
2. jenkins部署失敗 首先去看對應任務的日誌
從日誌中可以看出來這裡jenkins 編譯是成功的 但是在複製war的時候報錯, 圖中是因為不小心把空格敲成換行了
閱讀更多 Java的小本家 的文章