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


一、無war包鏈接的情況

無war包鏈接時,需先下載war包到本地,然后執行:

---------------------------------------------以下部分為轉載----------------------------------------------------

1、下載插件Deploy to container

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

下載安裝后重啟jenkins。

 

去服務器重啟jenkins:

2、重啟Jenkins后,在增加構建后操作步驟中會多出一個選項Deploy war/ear to a container:

 3、新建一個任務,只需要配置代碼獲取方式和部署war包配置即可。

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

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

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" />

4、最后需要啟動遠程機器上的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包之前需要執行的操作:

1、判斷tomcat是否啟動,啟動則關閉;(中間也可以進行一些備份數據的操作)

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

3、啟動tomcat;

4、休眠20s,給tomcat啟動的時間;

5、最后直接點擊job的立即構建即可,war包會自動部署到tomcat的webapp下

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

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

二、有war包鏈接的情況

1、點擊“構建”-執行shell:

2、寫入shell命令:

3、點擊“立即構建”:

 這里我起了兩個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日記

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM