java+maven+dubbo服务部署脚本示例
前提说明
文中用到的参数说明:
project_name: 项目名
project_dir: 项目目录
env: 发布的环境参数
release_dir: 产物存放的位置
server_dir: 服务的目录
项目目录结构
编译脚本 (这里以发布dev分支进行说明)
cd ${project_dir} git checkout dev git pull origin dev mvn clean install -P${env}
跳过测试,修改命令
mvn clean install -Dmaven.test.skip -P${env}
如果有拷贝产物需求的话,加上下面的命令
cp ${project_dir}/target/${project_name}.tar.gz ${release_dir}
部署脚本
cd ${server_dir} cp ${release_dir}/${project_name}.tar.gz ./ rm -rf ./lib rm -rf ./bin tar zxf ${project_name}.tar.gz sh ./bin/killws.sh sh ./bin/startws.sh
附加
env.sh
#!/bin/bash
source /etc/profile
PRODUCTION=test
JAVA_HOME=${JAVA_HOME}
OUTPUT_HOME=/data/home/deploy/output
LOG_ROOT=${OUTPUT_HOME}/logs
STDOUT_LOG=${LOG_ROOT}/stdout.banniu.data.customtable.log
MAIN_CLASS=banniu.data.customtable.DataCustomTableMain
XMS=-Xms1024m
XMX=-Xmx1024m
export PRODUCTION JAVA_HOME OUTPUT_HOME DEBUG_PORT JMX_PORT LOG_ROOT XMS XMX
export LANG=zh_CN.UTF-8
killws.sh
#!/bin/bash
if [ `id -u` = 0 ]
then
echo "********************************************************************"
echo "ERROR! root (the superuser) can't run this script."
echo "********************************************************************"
exit 1
fi
cd `dirname $0`
BIN_DIR=`pwd`
cd ..
DEPLOY_HOME=`pwd`
HOST_NAME=`hostname`
KILL_PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_HOME" |awk '{print $2}'`
if [ -z "$KILL_PIDS" ]; then
echo "java service monitor $HOST_NAME is not started!"
exit 1;
fi
echo -e "Stopping havana monitor server $HOST_NAME ...\c"
for PID in ${KILL_PIDS} ; do
kill ${PID} > /dev/null 2>&1
done
COUNT=0
while [ ${COUNT} -lt 1 ]; do
echo -e ".\c"
sleep 1
COUNT=1
for PID in ${KILL_PIDS} ; do
PID_INST=`ps --no-heading -p ${PID}`
if [ -n "$PID_INST" ]; then
COUNT=0
break
fi
done
done
echo "OK!"
echo "PID: $KILL_PIDS"
startws.sh
#!/bin/bash
if [ `id -u` = 0 ]
then
echo "********************************************************************"
echo "** Error: root (the superuser) can't run this script!"
echo "********************************************************************"
exit 1
fi
cd `dirname $0`
BIN_DIR=`pwd`
cd ..
DEPLOY_HOME=`pwd`
if [ ! -d ${DEPLOY_HOME} ]; then
mkdir ${DEPLOY_HOME}
fi
HOST_NAME=`hostname`
#import environment variable from env.sh
. ${BIN_DIR}/env.sh
if [ ! -r ${JAVA_HOME}/bin/java ]; then
echo "********************************************************************"
echo "** Error: havana.javahome=$JAVA_HOME not exist!"
echo "********************************************************************"
exit 1
fi
JAVA_MEM_OPTS=" -server $XMS $XMX -XX:SurvivorRatio=2 -XX:+UseParallelGC "
JAVA_OPTS=" $JAVA_MEM_OPTS "
export JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true"
EXIST_PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_HOME" |awk '{print $2}'`
if [ ! -z "$EXIST_PIDS" ]; then
echo "havana service server $HOST_NAME already started!"
echo "PID: $EXIST_PIDS"
exit;
fi
if [ ! -d ${OUTPUT_HOME} ]; then
mkdir ${OUTPUT_HOME}
fi
if [ ! -d ${LOG_ROOT} ]; then
mkdir ${LOG_ROOT}
fi
echo -e "Starting havana monitor server $HOST_NAME ...\c"
LIB_JARS=${DEPLOY_HOME}/lib/*
CONFIG_DIR=${DEPLOY_HOME}/conf
nohup ${JAVA_HOME}/bin/java ${JAVA_OPTS} -Ddubbo.registry.file=${DEPLOY_HOME}/dubbo-registry.properties -classpath ${CONFIG_DIR}:${LIB_JARS} ${MAIN_CLASS} >> ${STDOUT_LOG} 2>&1 &
echo "OK!"
START_PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_HOME" |awk '{print $2}'`
cat /proc/${START_PIDS}/environ | tr '\0' '\n'
echo "PID: $START_PIDS"