部署脚本

#!/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 "\033[36m$(date +%F-%H-%M)-----删除旧的备份版本$i\033[0m"
rm -rf $BAKPATH/$i
done
fi


LogRecord "开始备份当前版本$NOWVERSION"
echo -e "\033[36m$(date +%F-%H-%M)-----开始备份当前版本$NOWVERSION\033[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 "\033[36m$(date +%F-%H-%M)-----备份当前版本完毕$NOWVERSION\033[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-$LocalIP\033"

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}\033"


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

猜你喜欢

转载自www.cnblogs.com/Qing-840/p/9285567.html