利用SVN进行项目自动化部署_以Resin容
【摘要】 一、 背景交待:最近负责将公司OA团队的开发上线流程进行了规范化管理,以往是开发测试上线,都是一个同事在做,这样的方式快捷,但容易出现问题,开发测试上线都可能是同一个人。现在,我将所有流程分开,开发、测试、上线、验收都由不同的同事进行负责。这里,我的任务是进行线上部署。一开始,我们的工作是上传需要上线的代码到svn,测试通过后,再将这批需要上线的代码放至正式进行部署更新。原来的方...
一、 背景交待:
最近负责将公司OA团队的开发上线流程进行了规范化管理,以往是开发测试上线,都是一个同事在做,这样的方式快捷,但容易出现问题,开发测试上线都可能是同一个人。现在,我将所有流程分开,开发、测试、上线、验收都由不同的同事进行负责。这里,我的任务是进行线上部署。一开始,我们的工作是上传需要上线的代码到svn,测试通过后,再将这批需要上线的代码放至正式进行部署更新。原来的方式,是用FTP上传代码再更新,也没有备份,现在我想将流程一次过搞定,并且有原来代码的备份。
二、 代码流程
啥也先不说,直接上shell代码autoDeploy.sh:
#!/bin/bash
#第一步,下载svn文件并备份原系统文件
if [ -z "$1" ];then
echo "请输入需要部署的SVN路径"
exit
fi
DIR_NAME=$(date +%Y%m%d)
if [ ! -n "$2" ];then
echo "指定文件夹参数为空"
else
DIR_NAME=$2
fi
SVN_URL=$1
#从svn下载
rm -rf /tmp/upload/$DIR_NAME
mkdir -p /tmp/upload/$DIR_NAME
cd /tmp/upload/$DIR_NAME
svn checkout $SVN_URL . --username xxxx --password xxxx
find . -type d -name ".svn"|xargs rm -rf
#echo "svn获取:svn checkout $SVN_URL --username xxx--password xxx"
#执行java程序进行备份
APP_HOME=/data/fileback
APP_CLASSPATH=$APP_HOME/bin
jarList=$(ls $APP_HOME/lib|grep jar)
#echo $jarList
for i in $jarList
do
APP_CLASSPATH="$APP_HOME/lib/$i":$APP_CLASSPATH
done
#echo $APP_CLASSPATH
export CLASSPATH=$CLASSPATH:$APP_CLASSPATH
#echo $CLASSPATH
echo 备份文件开始
java -Xms50m -Xmx250m cn.qtone.Main $DIR_NAME
echo 备份文件结束
#第二步停止程序
ppPID=0
getAppPID(){
pidInfo=`ps aux|grep java|grep -E "web-a"|grep -v grep`
if [ -n "$pidInfo" ]; then
appPID=`echo $pidInfo | awk '{print $2}'`
else
appPID=0
fi
}
shutdown(){
getAppPID
echo "==============================关闭程序开始========================================================"
if [ $appPID -ne 0 ]; then
cd /usr/local/resin-pro-3.1.6/bin/
./stop.sh
sleep 5 #等5秒后执行下一条
if [ $? -eq 0 ]; then
echo "[=============================关闭程序结束===============================]"
else
echo "[失败,重新尝试……]"
fi
getAppPID
if [ $appPID -ne 0 ]; then
shutdown
fi
else
echo "=========================未找到相关程序============================="
fi
}
shutdown
#第三步复制文件
echo "开始复制文件"
\cp -rfv /tmp/upload/$DIR_NAME/* /web/
echo "结束复制文件"
#第四步重启程序
cd /usr/local/resin-pro-3.1.6/bin/
./start.sh
echo "成功进行部署更新:"
exit
一、 特别说明
上述的shell代码,相信玩过linux的都能看明白;其中第一步的备份文件,由于自己写shell的功底不怎么样,所以选择了使用java的方式实现;具体的思路是这样:
1) 根据从svn下载下来的文夹列表,在实际项目中也将相同目录下的文件(如果存在)进行备份;
2) 将备份文件输出到指定的备份文件夹下,每一次的自动化部署执行,会生成一个版本号文件夹;
具体java代码看这里:代码链接
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)