利用SVN进行项目自动化部署_以Resin容

举报
ikbob 发表于 2019/01/17 17:21:34 2019/01/17
【摘要】 一、 背景交待:最近负责将公司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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。