理想方式-基于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端口,便于浏览器访问:
<Connector port=\"80\" protocol=\"HTTP/1.1\"
connectionTimeout=\"20000\"
redirectPort=\"8443\" />
<!--
<Connector port=\"8080\" protocol=\"HTTP/1.1\"
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 '<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<Context docBase=\"'$target_ln'\" allowLinking=\"true\">
</Context>' > 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!!