理想方式-基於shell腳本實現一鍵發佈
具備功能:
Tomcat自身配置與項目分離,便於以後升級Tomcat或者統一配置;
項目的配置文件與項目本身的war包分離(採用shell腳本將服務器上的配置文件替換war包內的配置文件);
一鍵部署與快速回滾
自定義項目的配置(jvm參數等)
實現步驟:
1.部署規劃
文件目錄結構:
├── service-app 項目部署文件目錄
--------------------------從安裝tomcat中拷貝以下文件夾
│ ├── conf
│ ├── logs (也可自己建立空文件夾)
│ ├── temp (同上)
│ ├── webapps (同上)
│ └── work (同上)
---------------------------項目相關文件
│ ├── app-conf (項目配置文件)
│ ├── war (war包解壓後存放的文件)
--------------------------編寫的shell腳本
│ ├── tomcat.sh (啟動腳本)
│ ├── deploy.sh (部署腳本)
--------------------------運行腳本後生成的文件
│ ├── appwar -> war/demo-2.0-2018-03-04_09-22-28 (軟連接指向解壓後的項目文件夾)
│ ├── current_deploy_info (當前部署記錄)
│ ├── last_deploy_info (上次部署記錄)
---------------------
[root@Aruen service-app]# ll
total 44
drwxr-xr-x 2 root root 4096 Nov 26 13:49 app-conf
lrwxrwxrwx 1 root root 45 Nov 26 14:28 appwar -> war/iaac-individual-2.0.0-2018-11-26_14-28-50
drwxr-xr-x 3 root root 4096 Nov 26 11:41 conf
-rwxr-xr-x 1 root root 84 Nov 26 14:28 current_deploy.sh
-rwxr-xr-x 1 root root 1706 Nov 26 14:11 deploy.sh
-rw-r--r-- 1 root root 84 Nov 26 14:28 last_deploy_info
drwxr-xr-x 2 root root 4096 Nov 26 14:28 logs
drwxr-xr-x 2 root root 4096 Nov 26 11:23 temp
-rwxr-xr-x 1 root root 640 Nov 26 11:31 tomcat.sh
drwxr-xr-x 5 root root 4096 Nov 26 14:28 war
drwxr-xr-x 7 root root 4096 Nov 26 11:23 webapps
drwxr-xr-x 3 root root 4096 Nov 26 11:25 work
修改conf下service.xml中的端口為默認80端口,便於瀏覽器訪問:
connectionTimeout="20000"
redirectPort="8443" />
2.tomcat.sh腳本
#!/bin/bash
#配置jvm參數
#export JAVA_OPTS="-Xms100m -Xmx200m"
#export JAVA_HOME=/usr/lib/java/jdk1.8.0_131
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE="`pwd`"
case $1 in
start)
$CATALINA_HOME/bin/catalina.sh start
echo start success!!
;;
stop)
$CATALINA_HOME/bin/catalina.sh stop
echo stop success!!
;;
restart)
$CATALINA_HOME/bin/catalina.sh stop
echo stop success!!
sleep 2
$CATALINA_HOME/bin/catalina.sh start
echo start success!!
;;
esac
exit 0
3.deploy.sh腳本
#!/bin/bash -e
#應用war包名稱
pom_a=$1
#版本號
pom_v=$2
export work_time=$(date +%Y-%m-%d_%H-%M-%S)
echo "deploy time: $work_time"
mkdir -p war/
#1.1 下載war包的命令可以在此補充(svn/ftp),這裡寫死為war目錄
war=war/${pom_a}-${pom_v}.war
deploy_war() {
#1.2檢查war包是否存在
if [ ! -f "$war" ]; then
echo "war not exist: $war"
exit 1
fi
#2.1解壓war包到指定目錄,格式為war包名稱加部署時間(single-1.0.0-2018-11-26_14-28-50)
target_d=war/${pom_a}-${pom_v}-$work_time
target_dir=`pwd`/$target_d
unzip -q $war -d $target_dir
#2.2替換war包解壓後的配置文件,重複直接覆蓋,不提示
\cp -rf app-conf/* $target_dir/WEB-INF/classes/
#2.3建立軟連接appwar指向解壓後的war包目錄
rm -f appwar
ln -sf $target_d appwar
#2.4判斷current_deploy_info文件是否存在,即是否部署過
# 第一次部署,將Root.xml中的Context標籤下的docBace目錄指向軟連接appwar,並建立本次部署信息記錄(current_deploy_info文件)
# 以後部署,停止tomcat並生成上次部署的信息(lash_deplo_info文件)
if [ -f current_deploy.sh ]
then
./tomcat.sh stop
cat current_deploy.sh > last_deploy_info
fi
target_ln=`pwd`/appwar
echo '
' > conf/Catalina/localhost/ROOT.xml
echo -ne "\npom_a=${pom_a}\npom_v=${pom_v}\ndir=${target_d}" > current_deploy.sh
chmod +x current_deploy.sh
./tomcat.sh start
}
deploy_war
修改deploy.sh、tomcat.sh可執行權限
chmod -R 755 deploy.sh/tomcat.sh
4.使用示例
配置文件在java中修改,
//File resourcesFile = new File(System.getProperty("user.dir") + "/resources/config.txt");
File resourcesFile = new File(System.getProperty("user.dir") + "/app-conf/config.txt");
再將config文件上傳到app-conf目錄下
[root@Aruen app-conf]# ll
total 4
-rw-r--r-- 1 root root 1211 Nov 26 13:49 config.txt
##################部署war目錄下single-2.0.0.war#########################
[root@Aruen service-app]# ./deploy.sh single 2.0.0
deploy time: 2018-11-26_14-28-50
Using CATALINA_BASE: /usr/service-app
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/service-app/temp
Using JRE_HOME: /usr/local/jdk1.8.0_144
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
stop success!!
Using CATALINA_BASE: /usr/service-app
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/service-app/temp
Using JRE_HOME: /usr/local/jdk1.8.0_144
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
start success!!
##################回滾部署版本為1.0#########################
[root@Aruen service-app]# ll
total 44
drwxr-xr-x 2 root root 4096 Nov 26 13:49 app-conf
lrwxrwxrwx 1 root root 45 Nov 26 14:28 appwar -> war/single-2.0.0-2018-11-26_14-28-50
drwxr-xr-x 3 root root 4096 Nov 26 11:41 conf
-rwxr-xr-x 1 root root 84 Nov 26 14:28 current_deploy.sh
-rwxr-xr-x 1 root root 1706 Nov 26 14:11 deploy.sh
-rw-r--r-- 1 root root 84 Nov 26 14:28 last_deploy_info
drwxr-xr-x 2 root root 4096 Nov 26 14:28 logs
drwxr-xr-x 2 root root 4096 Nov 26 11:23 temp
-rwxr-xr-x 1 root root 640 Nov 26 11:31 tomcat.sh
drwxr-xr-x 5 root root 4096 Nov 26 14:28 war
drwxr-xr-x 7 root root 4096 Nov 26 11:23 webapps
drwxr-xr-x 3 root root 4096 Nov 26 11:25 work
[root@Aruen service-app]# rm -f appwar
[root@Aruen service-app]# ln -sf war/single-1.0.0-2018-11-26_14-28-38
[root@Aruen service-app]# ll
total 44
drwxr-xr-x 2 root root 4096 Nov 26 13:49 app-conf
lrwxrwxrwx 1 root root 45 Nov 26 14:28 appwar -> war/single-1.0.0-2018-11-26_14-28-50
drwxr-xr-x 3 root root 4096 Nov 26 11:41 conf
-rwxr-xr-x 1 root root 84 Nov 26 14:28 current_deploy.sh
-rwxr-xr-x 1 root root 1706 Nov 26 14:11 deploy.sh
-rw-r--r-- 1 root root 84 Nov 26 14:28 last_deploy_info
drwxr-xr-x 2 root root 4096 Nov 26 14:28 logs
drwxr-xr-x 2 root root 4096 Nov 26 11:23 temp
-rwxr-xr-x 1 root root 640 Nov 26 11:31 tomcat.sh
drwxr-xr-x 5 root root 4096 Nov 26 14:28 war
drwxr-xr-x 7 root root 4096 Nov 26 11:23 webapps
drwxr-xr-x 3 root root 4096 Nov 26 11:25 work
[root@Aruen service-app]# ./tomcat.sh restart
Using CATALINA_BASE: /usr/service-app
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/service-app/temp
Using JRE_HOME: /usr/local/jdk1.8.0_144
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
stop success!!
Using CATALINA_BASE: /usr/service-app
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/service-app/temp
Using JRE_HOME: /usr/local/jdk1.8.0_144
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
start success!!