emergency_code_get(){ #获取代码的函数
writelog "code_get"
cd ${CODE_DIR} && git reset --hard HEAD^ #进入到代码目录更新代码,此处必须免密码更新,此目录仅用于代码更新不能放其他任何文件
/bin/cp -rf ${CODE_DIR} ${TMP_DIR}/ #临时保存代码并重命名,包名为时间+版本号,准备复制到web服务器
API_VERL=$(git show | grep commit | cut -d ' ' -f2)
API_VER=$(echo ${API_VERL:0:8}) #取八位
}
emergency(){ #紧急回退到上一个版本函数
emergency_code_get #执行将代码回退到上一个版本函数
code_build; #如果要编译执行编译函数
code_config; #cp配置文件
code_tar; #打包
code_scp; #scp到服务器
cluster_node_remove;
pre_deploy; #预生产环境部署
pre_test; #预生产环境测试
group1_deploy; #生产环境部署
group1_test; #生产环境测试
code_config; #cp差异文件
#code_test; #代码测试
shell_unlock #执行完成后删除锁文件
}
rollback_fun(){
for node in $ROLLBACK_LIST;do # 循环服务器节点列表
# 注意一定要加"号,否则无法在远程执行命令
ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/$1 /webroot/web-demo" # 立即回滚到指定的版本,$1即指定的版本参数
echo "${node} rollback success!"
done
}
rollback(){ # 代码回滚主函数
if [ -z $1 ];then
shell_unlock # 删除锁文件
echo "Please input rollback version" && exit 3;
fi
case $1 in # 把第二个参数做当自己的第一个参数
list)
ls -l /opt/webroot/*.tar.gz
;;
*)
rollback_fun $1
esac
}
main(){
if [ -f $LOCK_FILE ] ;then # 先判断锁文件在不在,如果有锁文件直接退出
echo "Deploy is running" && exit 10
fi
DEPLOY_METHOD=$1 # 避免出错误将脚本的第一个参数作为变量
ROLLBACK_VER=$2
case $DEPLOY_METHOD in
deploy) # 如果第一个参数是deploy就执行以下操作
shell_lock; # 执行部署之前创建锁。如果同时有其他人执行则提示锁文件存在
code_get; # 获取代码
code_build; # 如果要编译执行编译函数
code_config; # cp配置文件
code_tar; # 打包
code_scp; # scp到服务器
pre_deploy; # 预生产环境部署
pre_test; # 预生产环境测试
group1_deploy; # 生产环境部署
group1_test; # 生产环境测试
shell_unlock; # 执行完成后删除锁文件
;;
rollback) # 如果第一个参数是rollback就执行以下操作
shell_lock; # 回滚之前也是先创建锁文件
rollback $ROLLBACK_VER;
shell_unlock; # 执行完成删除锁文件
;;
emergency)
emergency; #紧急回退就不需要参数了,但是在执行的时候要确认一下是否要紧急回退,避免输入错误
;;
*)
usage;
esac
}
main $1 $2
1.1.4:修改当前web页面:
[www@master ~]$ cd web-demo
[www@master web-demo]$ echo "<h1>jenkins deploy test" > index.html
[www@master web-demo]$ git add index.html
[www@master web-demo]$ git commit -m "jenkins deploy test"
[master 9a43cf5] jenkins deploy test
1 file changed, 1 insertion(+), 1 deletion(-)
[www@master web-demo]$ git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@192.168.3.198:web/web-demo.git
beb37cb..9a43cf5 master -> master
Branch master set up to track remote branch master from origin.
1.4:回滚到任意版本:
1.4.1:在哪看回滚到的版本?:
$ ll /deploy/tmp/ #部署服务器,web服务器在nginx定义的目录查看版本
1.4.3:在jenkins执行回滚: