1. 程式人生 > >Jenkins+Maven+Github+Tomcat+shell實現自動化集成發布

Jenkins+Maven+Github+Tomcat+shell實現自動化集成發布

ioe ati 自動化 打印 snap 方法 互信 adf https協議

Jenkins+Maven+Github+Tomcat+shell實現自動化集成發布
在做這個工作得時候我查了很多網上資料,比較雜亂,最終在一名叫ianjinsong作者得文章中獲得啟發,還是要感謝這位仁兄!
一、環境準備:
Jenkins+Tomcat服務器:106.12.93.190(百度雲主機,測試Jenkins使用)
Tomcat服務器:118.24.137.86 (騰訊雲主機,測試發布ZrLog項目專用)
Github服務器:https://github.com/longyueyang/test-java.git
Github也可以選擇自行搭建的gitlab私服
Jenkins與Tomcat服務器之間實現互信任免密登錄(後期要實現遠程執行shell腳本),利用如下兩條命令:
Ssh-keygen
Ssh-copy-id
Jenkins的公鑰:cat /root/.ssh/id_rsa.pub
將公鑰添加到github得key信任中(名稱隨便寫):
技術分享圖片
二、環境部署
一、安裝jenkins
1.下載jenkins
? ? ??這裏我選擇的是war包安裝jenkins,下載最新得就行  
Jenkins 2.121.3我得版本
官網:https://jenkins.io/download/
技術分享圖片
2.安裝jdk環境
?jdk-8u73-linux-x64.gz
?本人分享下載地址:https://pan.baidu.com/s/1PndZNkYTkIzQYuWbO90T6g
tar -xvf jdk-8u73-linux-x64.gz -C /usr/local/
vim /etc/profile 追加如下
#JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_73
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
LANG=zh_CN.utf8
export LANG

3.安裝tomcat
? ? ?本人分享地址:https://pan.baidu.com/s/1zONUCed9ORxOtqQxLEFmng  
這個什麽版本都可以,別太舊了,舊的會有漏洞,解壓完成試試能不能用,tomcat目錄裏面bin目錄下,./catalina.sh start啟動,訪問一下,不能訪問基本都是防火墻問題,能出現tom貓界面就可以停了,可以./catalina.sh stop,也可以找到進程pid,kill-9 pid號,進到webapps目錄裏面刪除所有,把下載好的的jenkins.war拷進來,啟動tomcat。

技術分享圖片
http://118.24.137.86:8080/jenkins/
技術分享圖片
在服務器上面cat /root/.jenkins/secrets/initialAdminPassword會出現讓輸入的密碼,一串數字字母,多等一會就出現了接下來的界面
技術分享圖片
這個就是說推薦安裝還是自己選,需要的包後面可以裝,我點了第一個,知道用什麽插件點第二個也可以這樣裝的包少一點。安裝的插件都在/root/.jenkins/plugins/下面。

技術分享圖片

(PS:此處也很有可能出現jenkins處於離線狀態,前提是現實中並未斷網,可采取如下辦法補救:)
技術分享圖片
技術分享圖片
解決方法:
安裝插件那個頁面,就是提示你offline的那個頁面,不要動。然後打開一個新的tab,輸入網址http://118.24.137.86:8080/jenkins/pluginManager/advanced。 這裏面最底下有個【升級站點】,把其中的鏈接改成http的就好了,http://updates.jenkins.io/update-center.json。 然後在服務列表中關閉jenkins,再啟動,這樣就能正常聯網了
技術分享圖片

可以直接選擇continue as admin也可以創建用戶
?技術分享圖片
開始使用,點擊就會進來
?
? ? ?admin用戶登錄還不知道密碼是什麽,最好新建一個屬於自己得用戶,鄙人就是新建jenkins用戶使用
二、安裝Maven(用來構建項目)?
? ? 本人分享地址:https://pan.baidu.com/s/1_kqfLo8Kb_fBPfm7p6SFtA
tar -xvf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
vim ?/etc/profile
? ? ?export M2_HOME=/usr/local/maven3
? ? ?export M2=$M2_HOME/bin
? ? ?export PATH=$M2:$PATH
三、安裝git
yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker curl-devel
wget https://www.kernel.org/pub/software/scm/git/git-2.15.0.tar.gz
tar xzf git-2.15.0.tar.gz
cd git-2.15.0
./configure
make
make install
PS:git使用https協議出錯:Peer reports incompatible or unsupported protocol version
解決辦法:
yum update -y nss curl libcurl(解決git不支持https得問題)

nss為名稱解析和認證服務 curl為網絡請求庫

四、配置jenkins
? ? ?jenkins因為配置原因出錯千千萬,一步一報錯,天天有驚喜,下面配置是把坑都填好的。
?技術分享圖片
1.添加插件
技術分享圖片

選擇可選插件,過濾搜索,如果不知道那個有用沒用,git、ssh、maven過濾出來得都裝上
技術分享圖片

?
?選擇直接安裝也可以,重啟後安裝也可以,用什麽功能搜一下安裝沒,沒安裝裝上就好,我看了已經安裝的,比自己選安裝的安裝的多很多。。。
?很多教程都裝Deploy to?Container?Plugin,這個可以把包從運行的tomcat的項目http地址上直接發到項目服務器的目錄下,我仔細研究了下覺得還是linux shell腳本簡單。
2.工具配置
?技術分享圖片

jdk別名叫啥都可以,路徑寫對,寫你jdk環境變量配置的路徑,寫錯了會出現ERROR: Failed to parse POMs java.io.IOException: Cannot run program***錯誤
技術分享圖片
git的地址要寫的是git這個命令的地址不是目錄的地址,yum裝的自然是/usr/bin/git,我是編譯安裝路徑選自己得安裝位置/usr/local/bin/git
?技術分享圖片
?
?寫完保存就好,接下來系統配置
3.系統配置

?技術分享圖片
技術分享圖片
?
?這個配置費勁九牛二虎之力,剛開始一直找不到這個選項,後來在插件中安裝了maven得幾個插件才顯示,此處關系到maven得jar包存儲,也是相當重要
五、構建項目
?點擊新建,出現下圖,名字隨便起,選擇構建一個maven項目

?

技術分享圖片
?
?技術分享圖片
?技術分享圖片
連接git,此處在開始已經將jenkins所在服務器得公鑰加在了github上面,免密認證,自己搭建得gitlab私服也同理

?
技術分享圖片
?技術分享圖片

?

選擇這個這裏面可以寫腳本,我下面寫這個相當於腳本裏的命令去遠程執行另一個腳本
?技術分享圖片
如圖,後面的功能都是用腳本寫的,jenkins和Tomcat服務器互相做了免密登錄,在jenkins上可以直接用/usr/bin/ssh root@Tomcat的ip "要執行的命令"?
/bin/bash /data/tomcat.sh ?在Tomcat上執行這個腳本
過程:jenkins調用git把Github上的代碼下載到jenkins服務器,maven構建成war包,調用ssh運行shell腳本完成備份,停服務,清webapps,拷war包到tomcat下,起服務
至此保存配置,點擊立即構建
技術分享圖片
Tomcat請求項目頁面成功展示:
技術分享圖片
下面是我得腳本示例,寫的比較爛~
#!/bin/bash
#引入了系統環境變量,這樣系統環境變量裏面沒有export聲明的也可以用
source /etc/profile
sj=date +%m-%d-%H%M
#開始先打印個時間到日誌
echo date >> /tmp/ZrLog.log
#備份一下當前的項目,名字用ZrLog代替
tar -zcPf /data/bf/ZrLog_$sj.tar.gz /usr/local/tomcat8/webapps/ZrLog >>/dev/null
echo "tomcat備份成功,開始拷war包" >> /tmp/ZrLog.log
#在/data/bf裏面處理完再放到tomcat下,感覺停服務的時間短一些
#rm -rf /data/bf/ZrLog/*

/usr/bin/scp [email protected]:/root/.jenkins/workspace/test01/target/zrlog-1.10.1-SNAPSHOT.war /data/bf/ZrLog/ZrLog.war
echo "開始解壓,替換配置文件" >> /tmp/ZrLog.log
unzip /data/bf/ZrLog/ZrLog.war -d /data/bf/ZrLog >>/dev/null
sleep 3
rm -rf /data/bf/ZrLog/ZrLog.war
echo "停止服務"
tomcat_pid=/usr/sbin/lsof -i:8080 | awk -F" " NR==2‘{print $2}‘
kill -9 $tomcat_pid
rm -rf /usr/local/tomcat8/webapps/ZrLog/
/bin/cp -a /data/bf/ZrLog /usr/local/tomcat8/webapps/
echo "啟動服務" >> /tmp/ZrLog.log
/usr/local/tomcat8/bin/catalina.sh start &
sleep 10
re_pid=/usr/sbin/lsof -i:8080 | awk -F" " NR==1‘{print $2}‘
if [ $re_pid == "PID" ];then
echo "tomcat自動部署成功"
echo "tomcat重啟成功" >> /tmp/ZrLog.log
else
echo "tomcat自動部署失敗"
echo "tomcat重啟失敗" >> /tmp/ZrLog.log

fi

Jenkins+Maven+Github+Tomcat+shell實現自動化集成發布