Java 杂谈Java技术升华开发辅助技术

tomcat-war包一键部署脚本

2019-04-19  本文已影响15人  新签名

背景

目前大多数服务仍是以tomcat-war形式进行部署,在一些不具备自动化部署环境下,更换war包仍需手动,步骤重复且复杂,大概分为以下步骤:

部署次数少还可以接受,如果服务数量多起来,这样重复的步骤做不了几次就会让你崩溃,此时肯定会想如果能换上自动化部署工具(如:jenkins)就好了,但是自己说话没有话语权,仍需要忍着并不断的干着。

既然不能改变环境,那就适应它,所以制作了一个中间脚本去适应它。

需求

先不放脚本而是说下需求,我们需要这个脚本干什么

介绍

准备

ok,有了上述需求,那我们就可以下手code了,下面贴出我的代码

#!/bin/bash
project_name=abc
tomcat_path=/root/tomcat/tomcat-8080-abc
work_path=/share/tmp/abc

if [[ !(-f ${work_path}/war/${project_name}.war) ]]
then
    echo "工作目录中,未检测到war包"
    exit 1;
fi
######################################### kill启动过tomcat #########################################
## 建议tomcat目录命名格式为:tomcat-端口-项目名
echo "1、kill之前启动过的${project_name}"
eval $(ps --no-heading -aux |grep "${project_name}" | grep -v "grep"|awk '{print "kill -9 " $2}')

######################################### 备份配置文件 #########################################
echo "2、备份${project_name}配置文件"
#备份class下的配置文件
if [[ !(-d "${work_path}/conf") ]]
then
    mkdir -p "${work_path}/conf"
fi
if [[ -d "${tomcat_path}/webapps/${project_name}" ]]
then
    awk 'BEGIN { cmd="cp -iR '"${tomcat_path}"'/webapps/'"${project_name}"'/WEB-INF/classes/* '"${work_path}"'/conf"; print "n" |cmd; }'
    echo ""
else
  echo "未检测到部署的${project_name}文件夹"
fi

#备份web.xml文件
if [[ !(-d "${work_path}/web") ]]
then
    mkdir -p "${work_path}/web"
fi
if [[ -d "${tomcat_path}/webapps/${project_name}" ]]
then
    awk 'BEGIN { cmd="cp -i '"${tomcat_path}"'/webapps/'"${project_name}"'/WEB-INF/web.xml '"${work_path}"'/web"; print "n" |cmd; }'
    echo ""
else
  echo "未检测到部署的${project_name}文件夹"
fi
######################################### 清除旧文件 #########################################
echo "3、清除旧${project_name}文件"
rm -rf "${tomcat_path}/webapps/${project_name}"*

######################################### 解压并移动 #########################################
echo "4、解压并移动新的${project_name}文件"
if [[ !(-d "/tmp/${project_name}") ]]
then
    mkdir "/tmp/${project_name}"
fi

cp  "${work_path}/war/${project_name}.war" "/tmp/${project_name}/"
cd "/tmp/${project_name}/"
jar -xf "${project_name}.war"
rm -f "/tmp/${project_name}/${project_name}.war"
mv "/tmp/${project_name}" "${tomcat_path}/webapps/"
rm -rf "/tmp/${project_name}"

######################################### 替换配置文件 #########################################
echo "5、替换配置文件"
cp -Rf "${work_path}/conf/"* "${tomcat_path}/webapps/${project_name}/WEB-INF/classes/"
cp -Rf "${work_path}/web/web.xml" "${tomcat_path}/webapps/${project_name}/WEB-INF/web.xml"

echo "6、重启${project_name}"

${tomcat_path}/bin/startup.sh


这个shell中需要我们填写的信息有:

项目名tomcat路径很好明白,这里有必须要说下工作区间的概念,工作区间是具有特殊目录结构,包含要替换文件的目录。

.
├── replace.sh
└── war
    └── abc.war

运行

放置好war包后,就可以执行replace.sh运行了。运行后,它会按照以上6个步骤执行,同步将配置文件抽取出来放到工作区间内,以下是运行后的工作目录:

.
├── conf
│   └── logback.xml
├── replace.sh
├── war
│   └── abc.war
└── web
    └── web.xml

结尾

docker的volumes也支持类似的覆盖机制。

上一篇下一篇

猜你喜欢

热点阅读