设为首页 收藏本站
查看: 892|回复: 0

粗浅的增量代码上线shell脚本--菜鸟版

[复制链接]

尚未签到

发表于 2018-8-22 06:38:20 | 显示全部楼层 |阅读模式
#!/bin/sh  
#set -x
  
#auther: gushao
  
#time: 2014-5-30
  

  

  
#设置初始变量
  
#$1 参数说明 1  前台   2  后台   3  app
  

  
#用于区分测试环境上线和生产环境上线
  
env_test=1
  
case $env_test in
  
1)
  
REMOTE_IP=192.168.1.110
  
PARTS=22
  
#用于服务器重启时用
  
REMOTE_IP10=192.168.1.110
  
REMOTE_IP11=192.168.1.111
  
REMOTE_IP12=192.168.1.112
  
PARTS_RESIN10=22
  
PARTS_RESIN11=22
  
PARTS_RESIN12=22
  
;;
  
2)
  
REMOTE_IP=211.162.125.207
  
PARTS=1573
  
#用于服务器重启时用
  
REMOTE_IP10=211.***.125.2**
  
REMOTE_IP11=211.***.125.***
  
REMOTE_IP12=211.**.125.***
  
PARTS_RESIN10=1573
  
PARTS_RESIN11=10011
  
PARTS_RESIN12=10012
  
;;
  
*)
  
echo "输入参数有无,选择测试或正式环境"
  
exit 1
  
;;
  
esac
  

  
#中间路径变量
  
edir=`date +%Y-%m-%d`/`date +%H%M%S`
  
rdate=`date +%Y-%m-%d_%H%M%S`
  
NDATE=`date +%Y-%m-%d\ %H:%M:%S`
  
DET_RYD=/home/resin/project_name #本地同步代码
  
DET_TOMCAT=/home/resin/tomcat/webapps
  
DET_APP=/opt/tomcat_app/webapps
  
#用于ssh同步时,需要同步到的目录
  
DET_RYD_HOME=/home/resin/
  
DET_TOMCAT_HOME=/home/resin/tomcat
  
DET_APP_HOME=/opt/tomcat_app
  
SOURCE_RYD="/home/demo/demo_ryd/project_name"   #存放需要升级的代码路径
  
SOURCE_TOMCAT="/home/demo/demo_tomcat/webapps"
  
SOURCE_APP="/home/demo/demo_app/webapps"
  
#日志保存位置
  
LOG_RYD_BACK=/home/resin/log_back/project_name
  
LOG_TOMCAT_BACK=/home/resin/log_back/tomcat
  
LOG_APP_BACK=/home/resin/log_back/APP
  
LOG_PATH=/home/resin/codeupdate.log                          #日志文件位置
  
#将改变的代码,从服务器上保存到制定的路径
  
REVAL_RYD=/home/resin/reval_back/ryd/ryd
  
REVAL_TOMCAT=/home/resin/reval_back/tomcat/tomcat
  
REVAL_APP=/home/resin/reval_back/app/app
  
#保存这次上传的代码
  
CODE_RYD_BACK=/home/resin/code_bak/ryd/ryd
  
CODE_TOMCAT_BACK=/home/resin/code_bak/tomcat/tomcat
  
CODE_APP_BACK=/hom/resin/code_bak/app/app
  
DEBUG=1
  
#调试模块,判断代码执行结果,指令执行出错后输出出错信息
  
function altert() {
  
#usage:alert  
  
if [ "$1" -ne 0 ]
  
then
  
  echo "[warn]:$2 指令执行错误" >&2
  
  echo "指令执行错误,请检查错误原因,继续请回车"
  
  read x
  
fi
  
}
  
#此函数的做用是遍历$1的目录source,寻找$2目录中是否有一致的文件det,并输出不同的信息
  
#本脚本中此函数的变量$1为需要上传的文件,$2是服务器同步到本地的文件
  
function ergodic(){
  
#echo "$4"
  
INIT_PATH=$3
  
#usage: ergodic $1  $2 $3=$1
  
for file in ` ls $1`
  
do
  

  
   #此段代码的目的,是通过文本的方式完整文件或目录路径
  
   echo ${1}/${file}  > /tmp/tmp_wenijian.txt
  
   #然后将路径替换$1删除,替换为${DET}的路径
  
   eval sed -i "s#${INIT_PATH}##"  /tmp/tmp_wenijian.txt
  
   UNX=`cat /tmp/tmp_wenijian.txt | head -n 1`
  
   DET1=${2}$UNX
  
   path_a=${file}
  
   if [ -d ${1}/${file} ];then
  
        ergodic ${1}/${file} ${2} $3 $4
  
   else
  
        #此代码段目的,用于无论循环到哪层目录,通过完成路径截取
  
        echo ${1}/${file}  > /tmp/tmp_wenijian.txt
  
        eval sed -i "s#${INIT_PATH}##"  /tmp/tmp_wenijian.txt
  
                #unx是去除文件投的相对路径
  
        UNX=`cat /tmp/tmp_wenijian.txt | head -n 1`
  
        DET1=${2}$UNX
  
                   if [ -e ${DET1} ];then
  
              echo "[info][$NDATE]检测到改变文件:$UNX"   | tee -a  $LOG_PATH
  
              #此代码的目的是复制的时候讲文件的路径一起
  
                          cp  --parent ${2}$UNX  $4_${rdate}
  
          else
  
              echo "[warn][$NDATE]检测到新文件:$UNX"   | tee -a  $LOG_PATH
  
            fi
  
    fi
  
done
  
}
  
#此函数的做用是遍历$1的目录,并对比$2中的文件,是否一致,输出不同的信息
  
function DIFF_RYD(){
  
INIT_PATH=$3
  
  for file in ` ls $1`
  
  do
  
     echo ${1}/${file}  > /tmp/tmp_wenijian.txt
  
     eval sed -i "s#${INIT_PATH}##"  /tmp/tmp_wenijian.txt
  
     UNX=`cat /tmp/tmp_wenijian.txt | head -n 1`
  
     DET1=${2}$UNX
  
     path_a=${file}
  
        if [ -d ${1}/${file} ];then
  
                   DIFF_RYD ${1}/${file} ${2} $3
  
        else
  
           echo ${1}/${file}  > /tmp/tmp_wenijian.txt
  
           eval sed -i "s#${INIT_PATH}##"  /tmp/tmp_wenijian.txt
  
           UNX=`cat /tmp/tmp_wenijian.txt | head -n 1`
  
           DET1=${2}$UNX
  
                         if [ -e ${DET1} ];then
  
                    #比较上传到生产的文件和上传文件的差异
  
                    diff -q  ${DET1}  ${1}/${file}   | tee -a  $LOG_PATH
  
                  else
  
                     echo  "[error][$NDATE]上传文件与本地文件不同步,请检测"   | tee -a  $LOG_PATH
  
                     echo "[warn][$NDATE]检测到新文件:${1}/${file}"   | tee -a  $LOG_PATH
  
                  fi
  
        fi
  
  done
  
}
  
#project_name上传代码,$1是需要上传的代码SOURCE,$2是本地的同步目录DET,$3是同步代码的上一级目录DET_HOME
  
#$4是${CODE_BACK},$5是${LOG_BACK},$6是${REVAL},$7 remote_ip ,$8 port
  
#$INIT_PATH是需要上传的代码,$DET是本地同步的代码,$DET_HOME是同步代码的上一级目录
  
function MODEL_UPLOAD() {
  

  

  
#同步上产脚本主体函数
  

  
#预先创建各类自定义目录
  
test -e $2     || mkdir -p  $2
  
test -e $4_${rdate}     || mkdir -p  $4_${rdate}
  
test -e $5     || mkdir -p  $5
  
test -e $6_${rdate}     || mkdir -p  $6_${rdate}
  
test -e $1 || echo "[error][$NDATE]没有找到${2}部署文件"  | tee -a  $LOG_PATH
  
test -e $1 || exit
  
echo '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' >  $LOG_PATH
  
echo "[info][$NDATE]开始自动部署${2}版本上传"  | tee -a  $LOG_PATH
  
chown -R resin:resin  $1
  
#这个我定义的函数
  
ergodic $1 $2 $1 $6
  
chown -R resin:resin  $2
  
echo "--------------------------------"   | tee -a  $LOG_PATH
  
echo "判断两次同步期间${2}服务器是否有改动"   | tee -a  $LOG_PATH
  
rsync -vzrtopg  --delete --progress "-e ssh -p $PARTS"  resin@$REMOTE_IP:$2   $3  | tee -a  $LOG_PATH
  
sleep 2
  
echo "第二次进行判断"
  
rsync -vzrtopg  --delete --progress "-e ssh -p $PARTS"  resin@$REMOTE_IP:$2   $3  | tee -a  $LOG_PATH
  
echo "判断结束"  | tee -a  $LOG_PATH
  
echo "-------------------"   | tee -a  $LOG_PATH
  
echo "-----------------------------------------"
  
echo "将本地文件同步到远程服务器"  | tee -a  $LOG_PATH
  
rsync -vzrtopg   --progress "-e ssh -p $PARTS" $1  resin@$REMOTE_IP:$3   | tee -a  $LOG_PATH
  
sleep 2
  
echo "第二次"
  
rsync -vzrtopg   --progress "-e ssh -p $PARTS" $1  resin@$REMOTE_IP:$3   | tee -a  $LOG_PATH
  
echo "------------------------------------------"  | tee -a  $LOG_PATH
  
echo "将改变文件同步到本地服务器"  | tee -a  $LOG_PATH
  
rsync -vzrtopg   --progress "-e ssh -p $PARTS" $1  $3   | tee -a  $LOG_PATH
  
echo "--------------------------------------------------"
  
#此操作用于对比上传的文件和服务器同步到本地文件是否一致
  
echo "将运程服务器与本地服务器同步"  | tee -a  $LOG_PATH
  
rsync -vzrtopg  --delete --progress "-e ssh -p $PARTS"  resin@$REMOTE_IP:$2   $3  | tee -a  $LOG_PATH
  
sleep 2
  
echo "第二次"
  
rsync -vzrtopg  --delete --progress "-e ssh -p $PARTS"  resin@$REMOTE_IP:$2   $3  | tee -a  $LOG_PATH
  
echo "------------------------------"   | tee -a  $LOG_PATH
  
echo "文件检测开始:"    | tee -a  $LOG_PATH
  
DIFF_RYD $1 $2 $1
  
echo "文件检测结束"    | tee -a  $LOG_PATH
  
echo "-------------------------------------------------------------------------------------"    | tee -a  $LOG_PATH
  
#将此次需要长传的文件打包保存
  
mv  $1  $4_${rdate}
  
echo "文件上传结束"
  
#cat $LOG_PATH
  
cat $LOG_PATH > $5/${rdate}.log
  
}
  

  

  

  
case $1 in
  
1)
  
MODEL_UPLOAD $SOURCE_RYD $DET_RYD $DET_RYD_HOME $CODE_RYD_BACK $LOG_RYD_BACK $REVAL_RYD
  
;;
  
2)
  
MODEL_UPLOAD $SOURCE_TOMCAT $DET_TOMCAT  $DET_TOMCAT_HOME $CODE_TOMCAT_BACK  $LOG_TOMCAT_BACK $REVAL_TOMCAT
  
;;
  
3)
  
MODEL_UPLOAD $SOURCE_APP $DET_APP  $DET_APP_HOME $CODE_APP_BACK  $LOG_APP_BACK $REVAL_APP
  
;;
  
*)
  
echo "Usage:$0 {1project_name|2tomcat|3app}" | tee -a  $LOG_PATH
  
exit 1
  
;;
  
esac
  
exit 0



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554811-1-1.html 上篇帖子: 【一天一个shell命令】文本内容操作系列-grep 下篇帖子: Linux Shell十二 一键安装Discuz_v2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表