一、無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日記