随着项目发展, 需要将一个应用部署到多个环境上, 因为关系tomcat版本统一, 所以需要同一个tomcat下将一个应用部署到不同的端口, 这些应用连接不同数据库, 这里使用了tomcat多实例的方式. 利用tomcat环境变量CATALINA_BASE, 一共两个环境:
- 开发环境 连接开发库
- 测试环境 连接测试库
首先准备两个环境的实例目录
开发环境: multi-instance/dev
测试环境: multi-instance/test
两个实例目录都包含以下目录:
– bin 存放脚本 一般是启动脚本
– conf 实例配置文件, 复制 ${CATALINA_HOME}/conf 修改server.xml文件端口 注意SHUTDOWN 端口多个实例不能重复
– logs 实例日志
– temp
– webapps 实例运行应用
– work jsp等编译后的class文件
然后在 jenkins构建项目完成后, 将运行文件复制到对应实例的 webapps目录下, 在这里之前删除 之前部署应用的文件
启动脚本大致如下:
JAVA_HOME=/home/crt/jdk/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CATALINA_BASE="$dev_home"
export CATALINA_HOME="/home/crt/tomcat/apache-tomcat-7.0.72"
echo "开始重启开发环境[CATALINA_BASE=$CATALINA_BASE]::::::::::::::::::::::::::::::::::::::::::"
${CATALINA_HOME}/bin/startup.sh
开发环境启动完整脚本:
#!/bin/sh
#var
dev_home=/home/crt/tomcat/multi-instance/dev
dir_src_fromJenkins=/home/crt/jenkins/jenkins_home/jobs/myapps/workspace
cd $dev_home
pids=`ps -ef | grep 'tomcat/multi-instance/dev' | grep -v grep | awk '{print $2}'`
for pid in ${pids[@]}
do
if [ -n $pid ]; then
echo "Kill the $pid "
kill -9 $pid
fi
done
echo '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
sleep 2
#删除缓存
rm -rf $dev/webapps/* $dev_home/work/Catalina/localhost/*
#crp war
war_1=$dir_src_fromJenkins/app1/target/app1.war
#解压war
##unzip $file -d $dirname/
unzip $war_1 -d -o $dev_home/webapps/app1
#修改配置文件
cd $dev_home/webapps/app1/WEB-INF/classes/
f="app.properties"
newurl="platform.url:http://172.17.60.133:6060/app1"
## 替换应用访问地址
sed -i "/platform.url/d" $f
sed -i "/^#sed_mount/a$newurl" $f
##使用开发数据库
sed -i "s/data/data2/g" $f
JAVA_HOME=/home/crt/jdk/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CATALINA_BASE="$dev_home"
export CATALINA_HOME="/home/crt/tomcat/apache-tomcat-7.0.72"
echo "开始重启开发环境[CATALINA_BASE=$CATALINA_BASE]::::::::::::::::::::::::::::::::::::::::::"
${CATALINA_HOME}/bin/startup.sh
sleep 5
测试环境部署[包含jenkins对接]脚本:
#!/bin/bash
tpids=`ps -ef | grep 'tomcat/multi-instance/test' | grep -v grep | awk '{print $2}'`
for pid in ${tpids[@]}
do
if [ -n $pid ]; then
echo "kill the $pid "
kill -9 $pid
fi
done
echo '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
sleep 2
## test webapps_home
test_home=/home/crt/tomcat/multi-instance/test
dir_src_fromJenkins=/home/crt/jenkins/jenkins_home/jobs/myapps/workspace
cd $test_home
# app1
war_1=$dir_src_fromJenkins/app1/target/app1.war
# app2
war_2=$dir_src_fromJenkins/app2/target/app2.war
wars=(
$war_1
$war_2
)
#缓存
webapps=$test_home/webapps
del_dir=$test_home/work/Catalina/localhost
#del
echo 'Tomcat cache cleanup in {'$webapps '}{' $del_dir'}:::::::::::::::::::::::::::::::::::::::::'
rm -rf $webapps/* $del_dir/*
#cp war
echo '开始将war复制到测试环境[instance-test], into loop, path: '$webapps
for _e in ${wars[@]}
do
echo "[e- $_e]"
cp $_e $webapps
done
echo 'copied done,restart........'
echo '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
## source /etc/profile
### ./startup.sh &
JAVA_HOME=/home/crt/jdk/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CATALINA_BASE="$test_home"
export CATALINA_HOME="/home/crt/tomcat/apache-tomcat-7.0.72"
echo $CATALINA_BASE $CATALINA_HOME
${CATALINA_HOME}/bin/startup.sh
##nohup sh startup.sh &
##同步开发环境
echo '开始同步开发环境'
sleep 5
##启动开发环境
source ../dev/bin/start-dev.sh
sleep 6
echo 'restarted........'