無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)
一、點擊「構建」-執行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日記