首页 > 系统 > Linux >

基于git+rsync的代码--备份/上线/回滚--脚本一例

2016-10-19

简单分享下我们之前的采用的基于git的开发上线流程,以及所采用的的上线脚本。流程是个大问题,这里只简单说下只能希望是抛砖引玉了;上线脚本是本文“重点”。

简单分享下我们之前的采用的基于git的开发上线流程,以及所采用的的上线脚本。流程是个大问题,这里只简单说下只能希望是抛砖引玉了;上线脚本是本文“重点”。之所以想分享这套脚本,因为个人感觉这套脚本提供了一种目录间“备份–更新–回滚”的实现思路,对其中的细节稍作修改,应该可以适用到其他地方。

这一篇算是改进版,之前是一个项目一个脚本,其实里面逻辑基本一致,只是由于项目标准化度不够,导致无法统一管理。后来经过对开发测试生产环境进行一番规范统一之后,可以做到用一个脚本来管理所有项目的“备份-上线-回滚”操作

一些可参考的规范标准: (有些与本文无关了,但是这里一并写出来,规范化是自动化的前提)

项目在各环境的目录结构尽量保持一致

项目名称均取主域名之前的部分,例如api.baidu.com,则项目目录命名为api

nginx(举例)各虚拟主机的配置文件命名为上述项目名称.conf

项目框架尽量保持版本一致

下面开始正文:总结了两张图来说明基于git的开发流程和上线流程

image

image

下面一起来看上线脚本

#!/bin/sh

##########

#by ljk 20161017

#该脚本运行的前提是项目名称在本地和远程均统一规范:均取域名中".baidu.com"前面的部分,如api.baidu.com,项目名为api

#项目在本地及远程的目录统一规范:

# 在本地各项目均位于/home/update/to_online下

# 在远程各项目均位于/app下

#远程备份目录统一规范:均为/update_bak

##########

app_name=$1

###定义本地相关目录

local_base_dir="/home/update/to_online" #项目的本地目录

ip_file="/root/tongbu_to_online/ip/$app_name" #包含该站点信息'server_name-ip:port'格式的文件

exclude_files="/root/tongbu_to_online/exclude/$app_name" #该站点上线(rsync)所要排除的文件

error_log="/root/tongbu_to_online/error/$app_name" #该站点上线错误日志

###定义远程目录等变量

domain="$app_name".baidu.com ###项目域名

remote_base_dir="/app" #远程项目目录的父目录

bak_dir="/update_bak" #远程备份的目录

if [[ $app_name =~ ^(api|i|interface|m)$ ]];then

#根据项目名成确定在远程备份和回滚时使用到的--exclude参数,这里因为我的项目无法再更进一步规范统一,只能加判断

backup_rollback_exclude="--exclude 'app/storage' --exclude 'storage'"

elif [ $app_name = user ];then

backup_rollback_exclude="--exclude 'uploadPhoto.log'"

elif [[ $app_name =~ ^(acg|api)$ ]];then

backup_rollback_exclude=""

fi

if [[ $app_name =~ ^(api|acg|user)$ ]];then

#根据项目名成确定初始化配置文件的操作

alias init_config='ssh -p$port $ip "cd /$remote_base_dir/$app_name/ && sh init.sh production"'

else

alias init_config=''

fi

###检查用户参数输入

if [ $# -ne 1 ];then

echo -e "\e[1;31m-----------\n参数不正确,请输入要上线项目的名称(取域名中\".baidu.com\"前面的部分,如api.baidu.com,项目名为api)\n------------\e[0m"

exit -1

elif [[ $1 =~ ^(api|i|interface|m|news)$ ]];then

if [ ! -d $local_base_dir/$1 ];then

echo -e "\e[1;31m-----------\n本地目录$local_base_dir/$1不存在\n------------\e[0m"

exit -1

fi

else

echo -e "\e[1;31m-----------\n该脚本只适用于(api|i|interface|m|news)\n------------\e[0m"

exit -1

fi

function check {

#定义一个函数用于检查上一步执行是否成功

if [ $? -ne 0 ];then

echo -e "\e[1;31m `date +%Y%m%d_%H:%M:%S` $1 failed,please check it ! \e[0m"|tee -a $error_log

exit -1

fi

}

###主要功能开始

cat <

以下是使用截图:

备份:

image

更新:

image

回滚:

image
相关文章
最新文章
热点推荐