搭配Jenkins使用的服务器部署备份升级脚本

简介

主要搭配Jenkins使用,Jenkins将编译好的二进制文件上传至服务器指定文件夹中,然后执行该脚本进行原有程序备份并替换为新版程序。

参数说明

  • backupList 需要备份的文件列表,使用的是shell中的数据,使用一个空格分割,不限制数量
  • backupPath 需要备份的路径
  • backupLimit 备份数量限制
  • upgrageFilePath 新版本程序路径,一般为jenkins上传上来的临时路径

使用

  • ./脚本名.sh B 备份
  • ./脚本名.sh U 升级
  • ./脚本名.sh BU 备份后升级
#!/bin/bash

# POWER BY weijie_zhan@hotmail.com

# Backup item list: Do not use ",", Please use one white space to split.
backupList=("/data/web/dist" "/data/api/api.jar")
backupPath="/data/bak"
# Backup file quantity limit
backupLimit=5
upgradeFilePath="/data/bin"

#backup
bak() {
    if [ ! -d $backupPath ]; then
        echo "${backupPath} not existed"
        echo "execute mkdir -p ${backupPath}"
        mkdir -p ${backupPath}
    fi
    for item in "${backupList[@]}"; do
        if [ -e $item ]; then
            if test -d $item; then
                folderBak $item
            else
                fileBak $item
            fi
            removeOutLimitFile $item
        else
            echo "${item} not existed"
        fi
    done
}

# folder bakup
folderBak() {
    path=$1
    d=$(date "+%Y%m%d%H%M%S")
    folderName=${path##*/}
    tar czvf "${folderName}.tar.gz.${d}" $path
    mv "${folderName}.tar.gz.${d}" ${backupPath}
}

# file bakup
fileBak() {
    path=$1
    d=$(date "+%Y%m%d%H%M%S")
    fileName=${path##*/}
    cp $path "${backupPath}/${fileName}.${d}"
}

upgrade() {
    echo "Upgrage Process"
    for item in "${backupList[@]}"; do
        echo "Upgrage ${item}"
        if test $item = "/"; then
            echo "Illegal input!"
            echo "Illegal input!"
            echo "Illegal input!"
            echo "Illegal input!"
            return 0
        fi
        name=${item##*/}
        echo "${path}"
        if [ -e "${upgradeFilePath}/${name}" ]; then
            rm -rf $item
            path=$(dirname ${item})
            if [ ! -d ${path} ]; then
                echo "${path} not existed!"
                echo "Execute mkdir -p ${path}"
                mkdir -p ${path}
            fi
            cp -r "${upgradeFilePath}/${name}" $item
            echo "Upgrage ${item} succeed!"
        else
            echo "${upgradeFilePath}/${name} not existed!"
        fi
    done
}

removeOutLimitFile() {
    echo "Remove out limit file"
    path=$1
    name=${path##*/}
    i=0
    for file in $(ls -lt "/data/bak"); do
        if [[ $file =~ $name ]]; then
		i=$[$i+1]
		if [ $i -gt $backupLimit ];then
			echo "Remove out limit backup file ${file}"
			rm -f "${backupPath}/${file}"
		fi
	fi
    done
}

if [ $# == 0 ]; then
    echo "No argument"
    echo "B: backup, U: upgrage, BU: backup and upgrage"
else
    if [ $1 == "B" ]; then
        bak
    elif [ $1 == "U" ]; then
        upgrade
    elif [ $1 == "BU" ]; then
        bak
        upgrade
    else
        echo "Illegal input"
    fi
fi

posted @ 2022-11-16 14:52  Jay·Chan  阅读(98)  评论(0编辑  收藏  举报