本脚本运行条件
1 Linux服务器
2 服务器装有jdk tomcat svn maven
3 有svn账号
脚本参数说明
cmd:本脚本的参数 all:表示更新代码->maven打包->重启tomcat start:启动tomcat stop:关闭tomcat
svn_user:你的svn账号
svn_pass:你的svn密码
svn_path:svn项目地址
tomcat_path:tomcat路径如"/opt/tomcat7"
code_path:本地代码位置如 "/opt/code"
projectName:你当前项目名称如"dms_restaurant"
env:maven 打包传入的参数,根据自己的项目定义的变量参入(pom.xml中定义的)一般取值:dev(开发环境),test(测试环境),prod(生产环境)如果不用的话可以不用改,打包多参入一个参数没有影响
代码如下
#!/bin/sh
svn_user="XXXXX"
svn_pass="XXXXX"
svn_path="XXXXX"
#tomcat路径
tomcat_path="/opt/tomcat7"
#本地代码位置
code_path="/opt/code"
projectName="dms_restaurant"
#maven 打包传入的参数,根据自己的项目定义的变量参入(pom.xml中定义的)
env="dev"
#本脚本的参数 all:表示更新代码->maven打包->重启tomcat start:启动tomcat stop:关闭tomcat
cmd="all"
#如果用户传入指令则使用用户的指令
if [ $1 ];
then
cmd=$1
fi
echo "cmd的值为:${cmd} all:表示更新代码->maven打包->重启tomcat start:启动tomcat stop:关闭tomcat"
if [ "${cmd}" = "all" ];
then
#如果项目文件夹不存在说明没有下载过改项目代码,需要检出该项目
if [ ! -d ${code_path}/${projectName} ];
then
echo ${projectName}"不存在,检出该项目"
cd $code_path
#注释的这个指令是 临时用账号密码更新。后来发现如果调用频率太高会提示输入密码所以用下面的指令,只用第一次输入用户名密码就可以了
#svn checkout $svn_path --username $svn_user --password $svn_pass --no-auth-cache
svn checkout $svn_path
else
echo ${projectName}"存在,更新代码"
cd ${code_path}/${projectName}
#svn update --username $svn_user --password $svn_pass --no-auth-cache
svn update
fi
fi
if [ "${cmd}" = "all" ];
then
echo "maven 生成项目war包${projectName}"
cd ${code_path}/${projectName}
mvn install -Dmaven.test.skip=true -Denv=$env -U
#如果打包出错直接退出
if [ $? -ne 0 ];
then
exit 1
fi
fi
#切换到tomcat路径下
cd "${tomcat_path}/bin"
if [ "${cmd}" = "all" ];
then
#获取到tomcat的线程id
tomcat_id=$(ps -ef|grep "java"|grep -v "grep"|awk '{print $2} ')
#如果tomcat线程id存在说明tomcat已经启动,则需要杀死tomcat进程
if [ $tomcat_id ];
then
echo "关闭tomcat 线程id:${tomcat_id}"
kill -9 ${tomcat_id}
fi
#如果tomcat 下该项目存在则删除他
if [ -e "${tomcat_path}/webapps/${projectName}" ];
then
echo "删除tomcat下的${projectName}项目"
rm -rf "${tomcat_path}/webapps/${projectName}"
fi
#如果tomcat 下该项目war包存在则删除他
if [ -e "${tomcat_path}/webapps/${projectName}.war" ];
then
echo "删除tomcat下的${projectName}.war"
rm "${tomcat_path}/webapps/${projectName}.war"
fi
#复制打包好的项目带tomcat下面
cp "${code_path}/${projectName}/target/${projectName}.war" "${tomcat_path}/webapps/"
./startup.sh
elif [ "${cmd}" = "stop" ]
then
#获取到tomcat的线程id
tomcat_id=$(ps -ef|grep "java"|grep -v "grep"|awk '{print $2} ')
#如果tomcat线程id存在说明tomcat已经启动,则需要杀死tomcat进程
if [ $tomcat_id ];
then
echo "关闭tomcat 线程id:${tomcat_id}"
kill -9 ${tomcat_id}
else
echo "tomcat 未启动"
fi
elif [ "${cmd}" = "start" ]
then
./startup.sh
elif [ "${cmd}" = "log" ]
then
cd "${tomcat_path}/logs"
tail -200f catalina.out
fi
ps:该脚本经过自己的多次测试使用,如果网友发现有错误地方请及时指正,以便不误导其他网友。