1. 程式人生 > >【Jenkins】包含dubbo服務的war包自動部署tomcat

【Jenkins】包含dubbo服務的war包自動部署tomcat

在jenkis自動整合完專案後,需要將打成的war包部署到web應用伺服器上,這裡使用tomcat。jenkins自動整合後部署tomcat有很多種方式。
這裡使用了外掛和shell指令碼兩種方式。兩種方式各有利弊,根據自己專案的需要選擇不同的方式即可。

deploy to container外掛部署

1、需要在tomcat中新增使用者,這個使用者必須是管理員許可權。
 <role rolename="tomcat" />
  <role rolename="admin"/>
  <role rolename="admin-gui"/>
  <role
rolename="manager"/>
<role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="tomcat" password="tomcat" roles="tomcat,admin-gui,admin,manager,manager-gui,manager-script"/>
manager-gui
允許訪問html介面(即URL路徑為/manager/html/*)
manager-script
允許訪問純文字介面(即URL路徑為/manager/text/*)
manager-jmx
允許訪問JMX代理介面(即URL路徑為/manager/jmxproxy/*)
manager-status
允許訪問Tomcat只讀狀態頁面(即URL路徑為/manager/status/*)

2、在jenkins的管理外掛中搜索deploy to container plugin這個外掛,然後安裝即可。
安裝完成後,在配置好的web專案中,找到"增加構建後操作步驟",後選擇:

這裡寫圖片描述

3、配置jenkins中的tomcat相關資訊如下:

這裡寫圖片描述

到此通過外掛部署tomcat的方式就結束了。但是利用這種方式有一個缺點。
由於我們專案中使用了dubbo框架。
並且,我們的dubbo服務分為了很多的模組兒。每一個模組兒是單獨的一個專案,那麼需要單獨暴露一個dubbo服務的埠號。利用外掛的部署方式,這個外掛實現了tomcat的熱部署。
但是在重複部署dubbo專案時,由於埠號已經被佔用,而在重複部署時,不會自動關閉埠號,然後再啟動,
所以再次部署時,會出現無法註冊/bind服務埠號這種錯誤。針對這種問題,想到了採用python指令碼的方式來部署tomcat。

Shell指令碼部署tomcat

思路:
1、首先在jenkin整合完成之後,要先關閉tomcat
(關閉tomcat,會自動關閉dubbo服務所暴露的埠號)
2、將tomcat中之前部署的相同war包刪除
3、將jenkins工作空間中的war包拷貝到tomcat的部署路徑中
4、啟動tomcat
#!/bin/bash
export JAVA_HOME=/usr/local/jdk1.8
project_name=$WORKSPACE/target/$JOB_NAME-1.0.0-SNAPSHOT.war
tomcat_pid=`/usr/sbin/lsof -n -P -t -i :8080`
[ -n "$tomcat_pid" ] && kill -9 $tomcat_pid
rm -rf /usr/local/dubbo-admin-tomcat/webapps/$JOB_NAME.war
rm -rf /usr/local/dubbo-admin-tomcat/webapps/$JOB_NAME
cp $project_name /usr/local/dubbo-admin-tomcat/webapps/$JOB_NAME.war
cd /usr/local/dubbo-admin-tomcat/bin/
./startup.sh
通過這種方式部署,可以解決上面埠衝突的問題,同時也有自己的缺點,那就是每次部署都要重新啟動tomcat,比較麻煩。但好在都是由指令碼執行的。
根據自己的需要來選擇部署的方式吧!