zoukankan      html  css  js  c++  java
  • 部署脚本

    #!/bin/bash

    ##备份-->生成md5文件->push->验证md5文件
    if [ $# != 5 ];then
    echo "bash $0 study /opt/case 3.3.5.509 'md5.1|md5.2|VERSION.txt|logs|*.ini|.git' 0"
    exit 1
    fi


    PRONAME=$1
    ROOTPATH=$2
    TAG=$3
    GREP_ARGS=$4
    IS_TAG=$5
    PROJIEDIAN='x.x.x.x.x'


    PROJDMC1="发布机节点推送"

    BAKPATH="/opt/backup/${PRONAME}"
    #PROPATH="/opt/case/${PRONAME}"
    PROPATH="$ROOTPATH/${PRONAME}"
    KeyFile="/home/dev/.ssh/fabuji"

    if [ "$IS_TAG" == "1" ];then

    touch $PROPATH/$TAG/exclude.txt
    NOWVERSION=`head -1 $PROPATH/$TAG/VERSION.txt`
    VERDATE=`sed -n '2p' $PROPATH/$TAG/VERSION.txt`
    UpMsg=`cat $PROPATH/$TAG/VERSION.txt | tail -n +3`

    else

    NOWVERSION=`head -1 $PROPATH/VERSION.txt`
    VERDATE=`sed -n '2p' $PROPATH/VERSION.txt`
    UpMsg=`cat $PROPATH/VERSION.txt | tail -n +3`
    touch $PROPATH/exclude.txt

    fi
    echo "$PRONAME, $PROPATH, $NOWVERSION"

    LogPath="/opt/logs/pub"

    if [ "$NOWVERSION" != "${TAG}" ];then

    echo "ERROR: $NOWVERSION not is ${TAG}"
    exit 1

    fi


    LofFile="${PRONAME}_pub.log"
    [ ! -d $LogPath ] && mkdir $LogPath -p
    [ ! -d $BAKPATH ] && mkdir $BAKPATH -p

    # 必须以 dev 身份运行
    if [ "`whoami`" = "dev" ];then
    echo ""
    else
    echo "the current user is not dev";
    exit 1
    fi

    #日志生成
    function LogRecord() {
    log_content=$1
    cd /home/dev
    python -c "from hflog import HFLog; log = HFLog('$PRONAME','$LogPath').RecordLog(); log.info('$log_content')"
    }

    #md5校验文件生成

    function jiaoyan() {

    echo "jiaoyan" >>/tmp/log.txt
    LogRecord "生成校验md5.1文件"
    echo -e "$(date +%F-%H-%M)-----生成校验md5.1文件"

    if [ "$IS_TAG" == "1" ];then

    cd $PROPATH/$NOWVERSION

    else
    cd $PROPATH


    fi

    # /bin/find ./ -type f -print | grep -vE 'md5.1|md5.2|VERSION.txt|logs|*.ini|.git' | xargs md5sum > $PROPATH/md5.1

    echo `pwd` >>/tmp/log.txt
    /bin/find ./ -type f -print | grep -vE "$GREP_ARGS"| xargs md5sum > md5.1
    LogRecord "校验文件md5.1生成完毕"
    echo -e "$(date +%F-%H-%M)-----校验文件md5.1生成完毕"
    }

    #备份及删除旧的备份
    function bakres() {
    echo "backup" >>/tmp/log.txt
    VERNUM=`ls $BAKPATH/ | wc -l`
    if [ $VERNUM -gt 10 ]
    then
    cd $BAKPATH
    for i in `ls $BAKPATH/ | sort -rn -t "." -k1,1 -k2,2 -k3,3 -k4,4 | tail -n +10`
    do
    LogRecord "删除旧的备份版本$i"
    echo -e "33[36m$(date +%F-%H-%M)-----删除旧的备份版本$i33[0m"
    rm -rf $BAKPATH/$i
    done
    fi


    LogRecord "开始备份当前版本$NOWVERSION"
    echo -e "33[36m$(date +%F-%H-%M)-----开始备份当前版本$NOWVERSION33[0m"

    if [ "$IS_TAG" == "1" ];then

    cd $PROPATH/$NOWVERSION
    rsync -a --exclude=studyUpload --exclude=runtime $PROPATH/$NOWVERSION/ $BAKPATH/$NOWVERSION

    else

    cd $PROPATH
    rsync -a --exclude=studyUpload $PROPATH/ $BAKPATH/$NOWVERSION

    fi

    LogRecord "备份当前版本完毕$NOWVERSION"
    echo -e "33[36m$(date +%F-%H-%M)-----备份当前版本完毕$NOWVERSION33[0m"
    }

    #项目发布主脚本
    function FABU() {
    echo "fabu">>/tmp/log.txt
    LocalIP=$1
    JD_NAME=$2
    LogRecord "开始推送到发布机-$JD_NAME-$LocalIP"
    echo -e "$(date +%F-%H-%M)----- 开始推送-$JD_NAME-$LocalIP33"

    if [ "$IS_TAG" == "1" ];then
    rsync -avz -e "ssh -i $KeyFile -p 16300 -o StrictHostKeyChecking=no" $PROPATH/$NOWVERSION/ dev@${LocalIP}:$PROPATH/$NOWVERSION/
    else
    rsync -avz -e "ssh -i $KeyFile -p 16300 -o StrictHostKeyChecking=no" --exclude-from=$PROPATH/exclude.txt $PROPATH/ dev@${LocalIP}:$PROPATH/$NOWVERSION/
    fi


    echo "check md5" >>/tmp/log.txt
    LogRecord "开始校验${JD_NAME}文件"
    echo -e "$(date +"%F %H:%M:%S")-------md5文件校验${JD_NAME}33"


    python /home/dev/ssh_nopass_cmd.py ${LocalIP} 16300 dev $KeyFile "/opt/bin/md5_new.sh $PROPATH ${NOWVERSION}"

    echo "check md5 end" >>/tmp/log.txt
    LogRecord "推送到发布机-$JD_NAME-$LocalIP毕"
    echo -e "$(date +%F-%H-%M)----- 更新$JD_NAME-$LocalIP完毕"
    }


    bakres
    jiaoyan
    echo -e "要更新的版本为:${NOWVERSION}-更新版本的日期为:${VERDATE}-更新的内容为:${UpMsg}"

    echo -e "$PROJDMC1-$PROJIEDIAN"

    FABU $PROJIEDIAN $PROJDMC1

    cat md5_new.sh

    #!/bin/bash
    PRONAME=$1
    VERSION=$2

    PROPATH="${PRONAME}/${VERSION}"

    echo $PROPATH
    if [ ! -d $PROPATH ];then
    echo $PROPATH
    echo "不存在${PRONAME}的${VERSION}版本目录,请登陆检查。"
    exit 1
    fi

    cd ${PROPATH}

    [ -f md5.2 ] && rm -f md5.2

    for MD5 in `cat md5.1 | awk '{print $2}'`;do
    echo $MD5
    md5sum $MD5 >> md5.2
    done

    if [ -z "`diff md5.1 md5.2`" ]
    then
    echo -e "${PRONAME} MD5 is OK"
    else
    echo -e "${PRONAME} MD5 is not OK"
    fi

    exit

  • 相关阅读:
    COGS 14. [网络流24题] 搭配飞行员
    洛谷 P3376 【模板】网络最大流
    洛谷 P2936 [USACO09JAN]全流Total Flow
    codevs 2038 香甜的黄油 USACO
    codevs 1993 草地排水 USACO
    Openjudge 2.5 6264:走出迷宫
    洛谷 P1744 采购特价商品
    HDU
    中国剩余定理
    bzoj2157: 旅游
  • 原文地址:https://www.cnblogs.com/Qing-840/p/9285567.html
Copyright © 2011-2022 走看看