Tomcat优化发布项目流程(项目/配置文件文件分离)

Tomcat优化发布项目流程


        对于没有专业运维人员支持的团队来说,通常项目的上线发布还是由开发人员来负责。针对需要部署在tomcat容器中的项目,由于没有很好的规划线上环境tomcat的配置,导致部署过程中费时费力、各种低级错误,我表示曾经就深受其害。。。受前辈们的启发,在此整理了下我认为相对比较高效方式,希望能给各位小伙伴们一些帮助。

传统方式在tomcat下部署应用

步骤:
  1. 打war包;
  2. 停止tomcat;
  3. 上传并替换webapps目录下的war包;
  4. 替换生成环境下应用的配置文件,通常在 WEB-INF/classes/config.xml、db.properties等(最坑的地方);
  5. 重启tomcat;
弊端:
  1. 整个过程繁琐,易出错(特别是替换一些配置文件的时候);
  2. 没有自动生成发布记录,如果项目发布失败,不能快速的进行回滚;
  3. 项目与tomcat自身目录耦合较高,如果需要对tomcat进行升级,操作麻烦。

理想方式-基于shell脚本实现一键发布
具备功能:
  1. Tomcat自身配置与项目分离,便于以后升级Tomcat或者统一配置;
  2. 项目的配置文件与项目本身的war包分离(采用shell脚本将服务器上的配置文件替换war包内的配置文件);
  3. 一键部署与快速回滚
  4. 自定义项目的配置(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  (上次部署记录)

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/apache-tomcat-8.5.28
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包名称加部署时间(demo-1.0-2018-03-04_07-47-52)
        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_info ]
                then
                        ./tomcat.sh stop
                        cat current_deploy_info  > 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_info
        chmod +x current_deploy.sh
        ./tomcat.sh start
}

deploy_war

3.使用示例

##################部署war目录下demo_1.0.war#########################
[root@redhat service-app]# ./deploy.sh demo 1.0
deploy time: 2018-03-04_11-18-05
Using CATALINA_BASE:   /usr/local/service-app
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.28
Using CATALINA_TMPDIR: /usr/local/service-app/temp
Using JRE_HOME:        /usr/lib/java/jdk1.8.0_131
Using CLASSPATH:       /usr/local/apache-tomcat-8.5.28/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.28/bin/tomcat-juli.jar
stop success!!
Using CATALINA_BASE:   /usr/local/service-app
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.28
Using CATALINA_TMPDIR: /usr/local/service-app/temp
Using JRE_HOME:        /usr/lib/java/jdk1.8.0_131
Using CLASSPATH:       /usr/local/apache-tomcat-8.5.28/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.28/bin/tomcat-juli.jar
Tomcat started.
start success!!
[root@redhat service-app]# curl http://localhost:8080
<html>
<head>
    <title>tomcat部署优化</title>
</head>
<body>
tomcat部署优化-1.0
</body>
</html>
##################部署war目录下demo_1.0.war#########################
[root@redhat service-app]# ./deploy.sh demo 2.0
deploy time: 2018-03-04_11-20-51
Using CATALINA_BASE:   /usr/local/service-app
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.28
Using CATALINA_TMPDIR: /usr/local/service-app/temp
Using JRE_HOME:        /usr/lib/java/jdk1.8.0_131
Using CLASSPATH:       /usr/local/apache-tomcat-8.5.28/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.28/bin/tomcat-juli.jar
stop success!!
Using CATALINA_BASE:   /usr/local/service-app
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.28
Using CATALINA_TMPDIR: /usr/local/service-app/temp
Using JRE_HOME:        /usr/lib/java/jdk1.8.0_131
Using CLASSPATH:       /usr/local/apache-tomcat-8.5.28/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.28/bin/tomcat-juli.jar
Tomcat started.
start success!!
[root@redhat service-app]# curl http://localhost:8080
<html>
<head>
    <title>tomcat部署优化</title>
</head>
<body>
tomcat部署优化-2.0
</body>
</html>
##################回滚部署版本为1.0#########################
[root@redhat service-app]# ll
总用量 52
drwxr-xr-x. 2 root root 4096 3月   4 07:20 app-conf
lrwxrwxrwx. 1 root root   32 3月   4 11:20 appwar -> war/demo-2.0-2018-03-04_11-20-54
drwx------. 3 root root 4096 2月  24 05:42 conf
-rw-r--r--. 1 root root   58 3月   4 11:20 current_deploy_info
-rwxrwxrwx. 1 root root 1701 3月   4 09:12 deploy.sh
-rw-r--r--. 1 root root   58 3月   4 11:20 last_deploy_info
drwxr-x---. 2 root root 4096 3月   4 06:11 logs
drwxr-x---. 2 root root 4096 2月  24 05:42 temp
-rwxrwxrwx. 1 root root  508 3月   4 06:10 tomcat.sh
drwxr-xr-x. 7 root root 4096 3月   4 11:20 war
drwxr-x---. 2 root root 4096 3月   4 09:22 webapps
drwxr-x---. 3 root root 4096 2月  24 06:17 work
[root@redhat service-app]# rm -f appwar
[root@redhat service-app]# ln -sf war/demo-1.0-2018-03-04_11-18-05 appwar
[root@redhat service-app]# ll
总用量 52
drwxr-xr-x. 2 root root 4096 3月   4 07:20 app-conf
lrwxrwxrwx. 1 root root   32 3月   4 11:30 appwar -> war/demo-1.0-2018-03-04_11-18-05
drwx------. 3 root root 4096 2月  24 05:42 conf
-rw-r--r--. 1 root root   58 3月   4 11:20 current_deploy_info
-rwxrwxrwx. 1 root root 1701 3月   4 09:12 deploy.sh
-rw-r--r--. 1 root root   58 3月   4 11:20 last_deploy_info
drwxr-x---. 2 root root 4096 3月   4 06:11 logs
drwxr-x---. 2 root root 4096 2月  24 05:42 temp
-rwxrwxrwx. 1 root root  508 3月   4 06:10 tomcat.sh
drwxr-xr-x. 7 root root 4096 3月   4 11:20 war
drwxr-x---. 2 root root 4096 3月   4 09:22 webapps
drwxr-x---. 3 root root 4096 2月  24 06:17 work
[root@redhat service-app]# ./tomcat.sh restart
Using CATALINA_BASE:   /usr/local/service-app
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.28
Using CATALINA_TMPDIR: /usr/local/service-app/temp
Using JRE_HOME:        /usr/lib/java/jdk1.8.0_131
Using CLASSPATH:       /usr/local/apache-tomcat-8.5.28/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.28/bin/tomcat-juli.jar
stop success!!
Using CATALINA_BASE:   /usr/local/service-app
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.5.28
Using CATALINA_TMPDIR: /usr/local/service-app/temp
Using JRE_HOME:        /usr/lib/java/jdk1.8.0_131
Using CLASSPATH:       /usr/local/apache-tomcat-8.5.28/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.28/bin/tomcat-juli.jar
Tomcat started.
start success!!
[root@redhat service-app]# curl http://localhost:8080
<html>
<head>
    <title>tomcat部署优化</title>
</head>
<body>
tomcat部署优化-1.0
</body>
</html>

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值