暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

linux脚本 - 增量包一键部署

小D学Java 2019-09-13
430

背景

上家公司写的一个根据增量包实现一键部署并支持回滚的脚本.主要目的在于用来温习回顾shell脚本

安装脚本

# !/bin/bash
# Program: install the
# use : ./install.sh **-**-**.zip
# History:
# 2016/02/19 hxk 1.0.0
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH


#声明路径前缀
deploymentsPath="/home/webadmin/deployments/"


#获取zip包名
zipName=$1


if [ -z "$zipName" ]; then
echo "请输入一个包名"
exit
fi


#调用备份脚本
./backup.sh $zipName


#新建一个临时文件夹来放解压文件
mkdir tempZip


#解压文件到tempZip包下
unzip $zipName -d tempZip >/dev/null


if [ -d "tempZip/APP" ]; then
cd tempZip/APP


ls | grep .war > appWar.txt


cat appWar.txt | while read name
do
cp -r ./$name $deploymentsPath
# touch $deploymentsPath$name.dodeploy
done
cd ../../
fi




if [ -d "tempZip/ADMIN" ]; then
cd tempZip/ADMIN


ls | grep .war > adminWar.txt


cat adminWar.txt | while read name
do
cp -r ./$name $deploymentsPath
# touch $deploymentsPath$name.dodeploy
done

cd ../../
fi


#删除removeList的文件
cd tempZip
ls | grep removeList.txt > removeListTempName.txt
cat removeListTempName.txt | while read name
do
txtname=${name#* } #removeList.txt的文件名字
warname=${txtname%%-*} #war包名字
#TMD 转换win7的\r字符
cat $txtname | tr -d '\r' > newTxtFile.txt
#开始备份要删除的文件
cat newTxtFile.txt | while read path
do
#建立文件夹
filePath=${deploymentsPath}${warname}/${path} #这一个文件的文件夹路径
rm ${filePath}
done


done




#删除临时文件夹
rm -rf ../tempZip


备份脚本

# !/bin/bash
# Program: backup the war and create the list
# use : ./backup.sh **-**-**.zip
# History:
# 2016/02/19 hxk 1.0.0
# 2016/02/24 hxk 1.0.1 备份根据时间点来备份而不是根据日期来备份
# 2016/02/24 hxk 1.0.2 添加删除文件列表的备份
# lack of backup delete
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH


#声明路径前缀
deploymentsPath="/home/webadmin/deployments/"
backupPath="/home/webadmin/backup/"


#获取zip包名
zipName=$1


if [ -z "$zipName" ]; then
echo "请输入一个包名"
exit
fi


#输出文件列表
unzip -v ${zipName} |grep .war | awk '{print $8}' > list.txt


#获取zip包文件前缀
preProject=${zipName%%/*}
#获取当前日期
curDate=`date +%Y%m%d%H%M%S`
backupProjectPath=$backupPath/$zipName
#建备份目录,若存在则删除重新新建目录
if [ -d "$backupProjectPath" ]; then
rm -rf $backupProjectPath
fi
mkdir -p $backupProjectPath






#循环读取文件路径变量
cat list.txt |while read line
do
line=${line#*/} #去除APP或者ADMIN路径前缀
filePath=${deploymentsPath}${line} #war包对应的文件路径
fileDir=${line%/*} #这一个文件的文件夹路径
isFile=${filePath##*/} #截取最后一个/来判断是否是文件
addListFilePre=${line%%/*} #项目名字..即war名


#是文件
if [ -n "$isFile" ]; then
#存在文件,添加到updateList.txt,并备份
if [ -f $filePath ]; then
echo $filePath >> updateList-${addListFilePre}.txt #生成增加的清单
mkdir -p $fileDir #生成目录
cp $filePath ./$fileDir #复制文件
#不存在文件,添加到addList.txt
else
echo $filePath >> addList-${addListFilePre}.txt #生成更新的清单
fi
fi
done


#判断是否有removeList文件
unzip -v $zipName | grep removeList.txt | awk '{print $8}' > removeListCount.txt
removeCount=`cat removeListCount.txt | wc -l`


rm removeListCount.txt
if [ $removeCount -gt 0 ]; then
#备份准备要删除的文件
unzip $zipName *removeList.txt | grep remove > removeListTempName.txt #解压删除的文件列表
cat removeListTempName.txt | while read name
do
txtname=${name#* } #removeList.txt的文件名字
warname=${txtname%%-*} #war包名字
#TMD 转换win7的\r字符
cat $txtname | tr -d '\r' > newTxtFile.txt
#开始备份要删除的文件
cat newTxtFile.txt | while read path
do
#建立文件夹
fileDir=${warname}/${path%/*}/ #这一个文件的文件夹路径
if [ ! -d "$fileDir" ]; then
mkdir -p $fileDir
fi
#复制文件
oldFilePath=${deploymentsPath}${warname}/${path}
cp $oldFilePath $fileDir
done


done




rm removeListTempName.txt
rm newTxtFile.txt


fi


#移动war包到备份的文件夹
pwdDir=`pwd`
ls | grep .war > warList.txt
cat warList.txt | while read name
do
mv $name $backupProjectPath
done


#删除临时文件
rm warList.txt
rm list.txt


#移动List清单
mv *.txt $backupProjectPath 2>/dev/null


回滚脚本

# rollback the war
# use : ./rollback.sh 原zip包路径
# History:
# 2016/02/19 hxk 1.0.0
# 2016/04/06 hxk 1.1.0 修改根据原zip包来传参数
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH


#声明路径前缀
deploymentsPath="/home/webadmin/deployments/"
backupPath="/home/webadmin/backup/"


#获取回滚文件路径
zipName=$1


if [ -z "$zipName" ]; then
echo "请输入回滚文件夹路径"
exit
fi


#进入回滚文件夹
cd $backupPath$zipName
#把备份的包复制回去
ls | grep .war > warList.txt
cat warList.txt | while read name
do
result=$(echo $name | grep "txt")
if [ "$result" == "" ]; then
cp -r $name $deploymentsPath
#touch $deploymentsPath$name.dodeploy
fi
done


#把新增加的删除


ls | grep add*war.txt > txtTempList.txt
cat txtTempList.txt | while read name
do
cat $name | while read path
do
rm $path
#touch $deploymentsPath$name.dodeploy
done
done


#删除临时文件
rm txtTempList.txt
rm warList.txt


文章转载自小D学Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论