标签 backup 下的文章

脚本内容,注意由于是在每天凌晨进行备份,所以备份时的备份目录是生成的昨天的日期目录:

#! /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脚本编写,望指证