写了一个脚本用于每天备份一下jenkins的工程代码
脚本内容,注意由于是在每天凌晨进行备份,所以备份时的备份目录是生成的昨天的日期目录:
#! /bin/bash
#===============
# Back up files once a day and delete old backups
# Author: joyber
#===============
ReservedNum=7 #keep last backup num
BSPATH=/var/lib/jenkins/workspace #jenkins
for dir in `ls -d $BSPATH/*_bak`
do
BSNAME=`basename $dir | sed 's/_bak//'` #project name
BAKDIR=`ls -t $dir | head -1` #last project code backup diri basename
SRC=$dir/$BAKDIR/ #copy src dir
DESC=$BSPATH/${BSNAME}_daybak/`date +%Y%m%d -d '-1 day'`/ #copy desc dir, yesterday
echo "$SRC => $DESC"
if [ ! -d $DESC ]; then
mkdir $DESC -p
fi
rsync -r $SRC $DESC #use rsync copy files
if [ $? -eq 0 ]; then
BAKDIR=`dirname $DESC`
cd $BAKDIR #goto day bak dir
FileNum=$(ls -l | grep '^d' | wc -l) #check backup num at now
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt | head -1) #del old backup files
echo $date "Delete File:"$OldFile
rm -rf $BAKDIR/$OldFile
let "FileNum--"
done
echo -e "\033[34mbackup success\033[0m"
else
echo -e "\033[31mbackup failed\033[0m"
fi
done可以结合这篇日记方法,实现代码能快速恢复到某一天的备份
jenkins 创建可回滚的项目发布:https://blog.qqvbc.com/default/364.html
将rollback部分的代码改写一下,把path变量设置为天备份,不存在的话就是发布备份了:
case $Status in
Rollback)
echo "Status:$Status"
echo "Version:$Version"
if [ $Version -lt 1 ];then
echo "Version val is error"
exit 1
fi
path="${WORKSPACE}/../${JOB_NAME}_daybak/$Version" #每天备份的目录
if [ ! -d $path ]; then
path="${WORKSPACE}/../${JOB_NAME}_bak/$Version" #备份目录
fi
if [ ! -d $path ]; then
echo "Bak dir not exists: $path"
exit 2
fi
#清除工作空间中除了.git文件夹的所有文件
find ${WORKSPACE}/ ! -regex .*\.git.* -empty -delete
rsync -r --exclude=".git" ${path}/ ${WORKSPACE}/ #将备份拷贝到构建工作空间
echo "Copy bak code ${path} to ${WORKSPACE} Completing!"
;;
*)
exit
;;
esac初学shell脚本编写,望指证