持續集成之Jenkins自動部署war包到遠程服務器

1、無war包連接的狀況

無war包連接時,需先下載war包到本地,而後執行:python

---------------------------------------------如下部分爲轉載----------------------------------------------------web

一、下載插件Deploy to containershell

首先須要下載一個Jenkins的插件:Deploy to container Plugin ,能夠在Jenkins的系統管理->插件管理->可選插件中查找apache

下載安裝後重啓jenkins。api

 

去服務器重啓jenkins:tomcat

二、重啓Jenkins後,在增長構建後操做步驟中會多出一個選項Deploy war/ear to a container:bash

 三、新建一個任務,只須要配置代碼獲取方式和部署war包配置便可。服務器

WAR/EAR files:輸入war包的相對路徑,如個人war包在新建目錄的target下app

context path:輸入用來訪問tomcat的名稱,localhost:8080/p**webapp

add container:增長容器,通常選tomcat 7X就能夠。這裏的username與password須要到tomcat的conf文件夾中的tomcat-users.xml修改。tomcat URL就是你但願把war包部署到的tomcat所在IP地址,最後面不須要再加斜槓/。

tomcat-users.xml中的用戶名及密碼默認是註釋掉的,因此須要刪除註釋,也能夠直接複製如下代碼到</tomcat-users>以前。若是隻是刪除註釋的話好像部署不會成功,還須要增長manager開頭的三個role才能夠。

  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager-gui" />
  <role rolename="manager-script" />
  <role rolename="manager-status" />
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="deploy" password="tomcat" roles="manager-gui,manager-script,manager-status" />

四、最後須要啓動遠程機器上的tomcat服務器,因爲不想這一步也須要手動操做,個人辦法是在部署war包以前先執行啓動tomcat腳本的操做,以後再執行部署。

個人部分代碼,判斷是否有包含tomcat-7.0.57/conf/logging.pro字段的進程,若是有則執行關閉tomcat,以後再判斷一遍是否關閉成功,若是進程還存在則直接殺進程。

如下代碼保存成ready.sh,不能忘記加執行權限:chmod +x ready.sh

if test $(ps -ef | grep tomcat-7.0.57/conf/logging.pro |wc -l) -eq 1
then
echo "------------no running ,can't shutdown------------"
else
echo $(ps -ef | grep conf/logging.pro |wc -l)
/usr/local/apache-tomcat-7.0.57/bin/shutdown.sh
echo "------------tomcat shutdowning--------------"
sleep 30
if test $(ps -ef | grep conf/logging.pro |wc -l) -eq 1
then
echo "------------no running ,can't kill------------"
else
ps -ef|grep tomcat-7.0.57/conf/logging.pro |cut -c 9-15|xargs kill -s 9
echo "------------tomcat killing--------------"
fi
fi

在部署war包以前須要執行的操做:

一、判斷tomcat是否啓動,啓動則關閉;(中間也能夠進行一些備份數據的操做)

二、休眠10s,給tomcat關閉的時間;

三、啓動tomcat;

四、休眠20s,給tomcat啓動的時間;

五、最後直接點擊job的當即構建便可,war包會自動部署到tomcat的webapp下

----------------------------------------------轉載部分結束-------------------------------------------------

(轉自https://blog.csdn.net/songjiaping/article/details/51454243)

2、有war包連接的狀況

一、點擊「構建」-執行shell:

二、寫入shell命令:

三、點擊「當即構建」:

 這裏我起了兩個tomcat,tomcat裏放的是服務,tomcat2裏放jenkins。

若是進程數<2,就不用關閉;不然執行關閉命令,再次判斷,若是未關閉,就kill掉。

wget http://${ip}:${port}/software/iFusion_GA/devToPro/iFusion_V4.1-20181106.war
cd /home/hadoop/.jenkins/workspace/${JOB_NAME}
mv iFusion_V4.1-20181106.war iFusion4.1_${JOB_NAME}.war
mv iFusion4.1_${JOB_NAME}.war  /home/hadoop/apache-tomcat-8.5.28/webapps/
if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
then
echo "----------no running, can't shutdown----------"
else
cd /home/hadoop/apache-tomcat-8.5.28/bin/
./shutdown.sh
echo "------------tomcat shutdowning--------------"
sleep 30
if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
then
echo "------------no running ,can't kill------------"
else
ps -ef|grep tomcat|grep -v grep|grep -v tomcat2|awk '{print $2}'|xargs kill -9
echo "------------tomcat killing--------------"
fi
fi
cd /home/hadoop/apache-tomcat-8.5.28/bin
./startup.sh 

還須要執行:

1)服務的配置工做 

2)判斷服務是否正常啓動運行我還沒想好該怎麼判斷 

3)因爲還要觸發接口測試工程,爲了不jmeter腳本里的文件夾名(url裏的最後部分)改動,目前我決定不改變每次更新的war包名稱,解壓後都叫同一個名字,最後在發郵件時郵件配置項裏再用參數形式,使用jenkins的參數,隨給個人連接地址中war包的名字變化。可是jenkins參數保存我還不知道怎麼弄。

2018年11月16日記


 

1)服務的配置工做 :我採用移動新配置文件到其餘地方,而後將寫好的配置文件替換回來的方式(配置文件內容固定,只需修改成我服務器上的ip和端口號)。

2)判斷服務是否正常啓動運行我還沒想好該怎麼判斷 :我寫了一個while循環專門判斷是否啓動。

3)jenkins參數保存使用shell中的$1,每次執行該shell腳本時傳入參數,shell會自動識別出來;配置郵件也採用這種方式,使用shell執行python命令,python中有sys.argv專門用來保存執行時取的參數。

具體shell代碼以下:

#!/bin/bash
#保存路徑、保存war包名########################################
#testwar="http://xx.xx.xx.xx:1111/software/iFusion_GA/devToPro/iFusion_V4.1-20181121asf.war"
testwar=$1 #每次執行該腳本時傳入參數便可
cd /software/iFusion_CI/
touch dir
echo $testwar >dir
touch war_filename
awk -F '/' '{print $NF}' /software/iFusion_CI/dir |awk -F '-' '{print $NF}'>>/software/iFusion_CI/war_filename 
warfilename="`awk -F '/' '{print $NF}' /software/iFusion_CI/dir`" #``表示執行裏面的命令
#下載war包,刪除原應用########################################
wget $testwar
cd /home/hadoop/apache-tomcat-8.5.28/webapps/
if test $(ps -ef|grep iFusionV4-1|grep -v grep |wc -l) -eq 1
then
echo "---------file exists, delete it first-----------"
else
echo "--------file not exist, go on---------"
fi
#放war包,重啓tomcat解壓war包#################################
cd /software/iFusion_CI/
mv $warfilename iFusionV4-1.war
mv iFusionV4-1.war  /home/hadoop/apache-tomcat-8.5.28/webapps/
if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
then
echo "----------no running, can't shutdown----------"
else
cd /home/hadoop/apache-tomcat-8.5.28/bin/
./shutdown.sh
echo "------------tomcat shutdowning--------------"
sleep 30
if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
then
echo "------------no running ,can't kill------------"
else
ps -ef|grep tomcat|grep -v grep|grep -v tomcat2|awk '{print $2}'|xargs kill -9 #xargs是將前面的結果保存爲後面的參數的意思
echo "------------tomcat killing--------------"
fi
fi
cd /home/hadoop/apache-tomcat-8.5.28/bin
./startup.sh 
#停掉tomcat,替換配置文件######################################
if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2 #lt是小於的意思,個人服務器裏面有一個tomcat專門用來放jenkins
then
echo "----------no running, can't shutdown----------"
else
cd /home/hadoop/apache-tomcat-8.5.28/bin/
./shutdown.sh
echo "------------tomcat shutdowning--------------"
sleep 30
if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
then
echo "------------no running ,can't kill------------"
else
ps -ef|grep tomcat|grep -v grep|grep -v tomcat2|awk '{print $2}'|xargs kill -9
echo "------------tomcat killing--------------"
fi
fi
cd /home/hadoop/apache-tomcat-8.5.28/webapps/iFusionV4-1/WEB-INF/classes/config
rm -f x-isinonet.properties
cp /software/iFusion_CI/config_files/x-isinonet.properties /home/hadoop/apache-tomcat-8.5.28/webapps/iFusionV4-1/WEB-INF/classes/config
#重啓tomcat####################################################
cd /home/hadoop/apache-tomcat-8.5.28/bin
while [[ "$(ps -ef|grep tomcat|grep conf/logging.p|wc -l)" -lt 2 ]] #注意中括號與字母之間要有空格
do
./startup.sh
done

郵件的shell命令我寫在另外一篇博客裏了。

 

至此,部署自動化、郵件發送自動化持續集成配置完畢(接口測試自動化就不在此描述了)。

2018年11月28日記

相關文章
相關標籤/搜索