赞
踩
基于Maven的自动化打包发布项目
1、配置项目文件 prolist.config
svn://10.1.23.215/Hive/HiveUDFIK hive-ik jar 10.130.2.245 /opt/bin/UDF
svn://10.1.23.215/Tools/WordBank WordBank war 10.130.3.211 /opt/tomcat/webapps
svn://10.1.23.215/REST/RestMysqlR restweb war 10.130.3.211 /opt/tomcat/webapps
参数分别为: svn的路径,打包的名称,打包的方式jar或者war,服务器地址,服务器的路径,以空格分隔。
2、调度脚本 runAutoPak.sh
#!/bin/bash
#
#owner:dp
#cronTime:30 1 * * *
#author:root
#mail:wuke@staff.hexun.com
#commitDate:2016-02-25
#inputData:prolist.config
#outputData: project.war
#private:
#cronDir:/opt/autopackage/bin
#cronfile:runAutoPak.sh
#cronlogDir:/opt/autopackage/bin/runAutoPak.log
#describe:访问路径
#note:
# 思路简述:
#
# 参数说明:
# prolist.config
# svn的路径,打包的名称,打包的方式jar或者war,服务器地址,服务器的路径,以空格分隔。
while read myline
do
svnurl=`echo $myline | awk '{print $1}'`
fileName=`echo $myline | awk '{print $2}'`
fileType=`echo $myline | awk '{print $3}'`
serverurl=`echo $myline | awk '{print $4}'`
serverdir=`echo $myline | awk '{print $5}'`
echo $svnurl $fileName $fileType $serverurl $serverdir
/opt/autopackage/bin/autopackage.sh $svnurl $fileName $fileType $serverurl $serverdir
wait
done < /opt/autopackage/bin/prolist.config
wait
if [ "$fileType" = "war" ]; then
echo "release war"
nohup /opt/autopackage/bin/restartTomcat.sh > /opt/autopackage/bin/res.log 2>&1 $
echo "vaildate server"
nohup /opt/autopackage/bin/vailTomcat.sh > /opt/autopackage/bin/vail.log 2>&1 $
else
echo "release jar"
fi
循环取配置文件里的项目参数来打包
3、打包脚本 autopackage.sh
#!/bin/bash
#
source /etc/profile
today=`date --date='0 days ago' +%Y-%m-%d`
cd /opt/autopackage/svncode
prdName=${1##*/}
rm -rf /opt/autopackage/svncode/$prdName
svn co $1
cd $prdName
mvn clean package
cd target
ssh -t -p 22 root@$4 "
rm -rf $5/$2.$3.*.bak
mv $5/$2.$3 $5/$2.$3.$today.bak
rm -rf $5/$2
" < /dev/null
scp $2.$3 $4:$5
4、打包上传后重启服务器 restartTomcat.sh
#!/bin/bash
#
ssh -t -p 22 root@10.130.3.211 "/opt/tomcat/bin/restart.sh"
调用远程的重启脚本 restart.sh
#!/bin/bash
#
source /etc/profile
master=`ps -ef | grep Bootstrap | grep tomcat | awk '{print $2}'`
echo $master
today=`date --date='0 days ago' "+%Y-%m-%d"`
todayTime=`date --date='0 days ago' "+%Y%m%d%H%M%S"`
if [ "$master" != "" ]; then
echo "Tomcat Master is restart!"
kill -9 $master
mv /opt/tomcat/logs/localhost.$today.log /opt/tomcat/logs/localhost.$todayTime.log
/opt/tomcat/bin/startup.sh
else
/opt/tomcat/bin/startup.sh
fi
5、验证发布的项目是否正常 vailTomcat.sh
#!/bin/bash
#
ssh -t -p 22 root@10.130.3.211 "/opt/tomcat/bin/validateTomcat.sh"
调用远程服务器的验证脚本 validateTomcat.sh
#!/bin/bash
#
today=`date --date='0 days ago' +%Y-%m-%d`
msg=`cat /opt/tomcat/logs/localhost.$today.log | grep java.lang | grep Exception`
if [ "$msg" != "" ]; then
echo "recovery!"
cd /opt/tomcat/webapps
rev=`ls | grep $today | grep bak`
i=1
while((1==1))
do
split=`echo $rev|cut -d " " -f$i`
if [ "$split" != "" ]
then
((i++))
echo $split
prdName=${split%war*}war
echo $prdName
rm -rf $prdName
mv $split $prdName
else
break
fi
done
wait
/opt/tomcat/bin/restart.sh
else
echo "ok"
fi
如果项目发布失败则恢复到原来的版本
6、crontab 定时调度脚本
45 13 * * * /opt/autopackage/bin/runAutoPak.sh > /opt/autopackage/bin/runAutoPak.log 2>&1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。