背景
上家公司写的一个根据增量包实现一键部署并支持回滚的脚本.主要目的在于用来温习回顾shell脚本
安装脚本
# !/bin/bash# Program: install the# use : ./install.sh **-**-**.zip# History:# 2016/02/19 hxk 1.0.0PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH#声明路径前缀deploymentsPath="/home/webadmin/deployments/"#获取zip包名zipName=$1if [ -z "$zipName" ]; thenecho "请输入一个包名"exitfi#调用备份脚本./backup.sh $zipName#新建一个临时文件夹来放解压文件mkdir tempZip#解压文件到tempZip包下unzip $zipName -d tempZip >/dev/nullif [ -d "tempZip/APP" ]; thencd tempZip/APPls | grep .war > appWar.txtcat appWar.txt | while read namedocp -r ./$name $deploymentsPath# touch $deploymentsPath$name.dodeploydonecd ../../fiif [ -d "tempZip/ADMIN" ]; thencd tempZip/ADMINls | grep .war > adminWar.txtcat adminWar.txt | while read namedocp -r ./$name $deploymentsPath# touch $deploymentsPath$name.dodeploydonecd ../../fi#删除removeList的文件cd tempZipls | grep removeList.txt > removeListTempName.txtcat removeListTempName.txt | while read namedotxtname=${name#* } #removeList.txt的文件名字warname=${txtname%%-*} #war包名字#TMD 转换win7的\r字符cat $txtname | tr -d '\r' > newTxtFile.txt#开始备份要删除的文件cat newTxtFile.txt | while read pathdo#建立文件夹filePath=${deploymentsPath}${warname}/${path} #这一个文件的文件夹路径rm ${filePath}donedone#删除临时文件夹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 deletePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH#声明路径前缀deploymentsPath="/home/webadmin/deployments/"backupPath="/home/webadmin/backup/"#获取zip包名zipName=$1if [ -z "$zipName" ]; thenecho "请输入一个包名"exitfi#输出文件列表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" ]; thenrm -rf $backupProjectPathfimkdir -p $backupProjectPath#循环读取文件路径变量cat list.txt |while read linedoline=${line#*/} #去除APP或者ADMIN路径前缀filePath=${deploymentsPath}${line} #war包对应的文件路径fileDir=${line%/*} #这一个文件的文件夹路径isFile=${filePath##*/} #截取最后一个/来判断是否是文件addListFilePre=${line%%/*} #项目名字..即war名#是文件if [ -n "$isFile" ]; then#存在文件,添加到updateList.txt,并备份if [ -f $filePath ]; thenecho $filePath >> updateList-${addListFilePre}.txt #生成增加的清单mkdir -p $fileDir #生成目录cp $filePath ./$fileDir #复制文件#不存在文件,添加到addList.txtelseecho $filePath >> addList-${addListFilePre}.txt #生成更新的清单fifidone#判断是否有removeList文件unzip -v $zipName | grep removeList.txt | awk '{print $8}' > removeListCount.txtremoveCount=`cat removeListCount.txt | wc -l`rm removeListCount.txtif [ $removeCount -gt 0 ]; then#备份准备要删除的文件unzip $zipName *removeList.txt | grep remove > removeListTempName.txt #解压删除的文件列表cat removeListTempName.txt | while read namedotxtname=${name#* } #removeList.txt的文件名字warname=${txtname%%-*} #war包名字#TMD 转换win7的\r字符cat $txtname | tr -d '\r' > newTxtFile.txt#开始备份要删除的文件cat newTxtFile.txt | while read pathdo#建立文件夹fileDir=${warname}/${path%/*}/ #这一个文件的文件夹路径if [ ! -d "$fileDir" ]; thenmkdir -p $fileDirfi#复制文件oldFilePath=${deploymentsPath}${warname}/${path}cp $oldFilePath $fileDirdonedonerm removeListTempName.txtrm newTxtFile.txtfi#移动war包到备份的文件夹pwdDir=`pwd`ls | grep .war > warList.txtcat warList.txt | while read namedomv $name $backupProjectPathdone#删除临时文件rm warList.txtrm 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:~/binexport PATH#声明路径前缀deploymentsPath="/home/webadmin/deployments/"backupPath="/home/webadmin/backup/"#获取回滚文件路径zipName=$1if [ -z "$zipName" ]; thenecho "请输入回滚文件夹路径"exitfi#进入回滚文件夹cd $backupPath$zipName#把备份的包复制回去ls | grep .war > warList.txtcat warList.txt | while read namedoresult=$(echo $name | grep "txt")if [ "$result" == "" ]; thencp -r $name $deploymentsPath#touch $deploymentsPath$name.dodeployfidone#把新增加的删除ls | grep add*war.txt > txtTempList.txtcat txtTempList.txt | while read namedocat $name | while read pathdorm $path#touch $deploymentsPath$name.dodeploydonedone#删除临时文件rm txtTempList.txtrm warList.txt
文章转载自小D学Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




