自动化部署流程
1.获取代码(直接拉取) 2.编译(可选) 3.配置文件 4.打包 5.SCP到目标服务器 6.将目标服务器移除集群 7.解压 8.放置到webroot 9.SCP差异文件 10.重启(可选) 11.测试 12.加入集群上线
回滚流程
#正常回滚 1.列出回滚版本 2.目标服务移除集群 3.执行回滚 4.重启和测试 5.加入集群 #紧急回滚 1.列出回滚版本 2.执行回滚(重启) #特急回滚 1.列出回滚上个版本(重启)
#!/bin/bash #自动部署脚本 #需要配置 #mkdir -p /deploy/code/web-demo #mkdir -p /deploy/config/web-demo/other #mkdir -p /deploy/tar #mkdir -p /deploy/tmp #mkdir -p /opt/webroot #mkdir -p /webroot #给与相应权限 #chown -R root:root /deploy #chown -R root:root /opt/webroot #chown -R root:root /webroot #部署节点 NODE_LIST="192.168.1.104 192.168.1.104" ROLLBACK_LIST="192.168.1.104" #脚本环境变量 SHELL_NAME="deploy.sh" SHELL_DIR="/root" SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log" #日期和时间变量 LOG_DATE=`date "+%Y-%m-%d"` LOG_TIME=`date "+%H-%M-%S"` CDATE=`date "+%Y-%m-%d"` CTIME=`date "+%H-%M-%S"` #代码变量 CODE_DIR="/deploy/code/web-demo" CONFIG_DIR="/deploy/config/web-demo" TMP_DIR="/deploy/tmp" TAR_DIR="/deploy/tar" LOCK_FILE="/tmp/run/deploy.lock" PRO_NAME="web-demo" #shell函数 usage(){ echo $"Usage: $0 [ deploy | rollback] | list sersion" } shell_lock(){ echo "11" > ${LOCK_FILE} } writelog(){ LOGINFO=$1 echo "${CDATE} ${CTIME}: $SHELL_NAME : ${LOGINFO}">> ${SHELL_LOG} } shell_unlock(){ rm -f ${LOCK_FILE} } #获取代码 code_get(){ writelog "code_get"; cd $CODE_DIR && echo "git pull" /bin/cp -r ${CODE_DIR} ${TMP_DIR}/ API_VER="v2.0" } #编译 code_build(){ echo build } #配置文件 code_config(){ writelog "code_config" /bin/cp -r ${CONFIG_DIR}/* ${TMP_DIR}/"${PRO_NAME}" PKG_NAME="${PRO_NAME}"_"$API_VER"_"${CDATE}"-"${CTIME}" cd ${TMP_DIR} && mv ${PRO_NAME} ${PKG_NAME} } #打包 code_tar(){ writelog "code_tar" cd ${TMP_DIR} && tar czf ${PKG_NAME}.tar.gz ${PKG_NAME} writelog " ${PKG_NAME}.tar.gz" } #SCP到目标服务器 code_scp(){ writelog "code_tar" for node in $NODE_LIST do scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/ done } #移除集群 cluster_node_remove(){ echo remove writelog "cluster_remove" } #解压部署 code_deploy(){ writelog "code_tar-deploy" for node in $NODE_LIST do ssh $node "cd /opt/webroot/ && tar zxf ${PKG_NAME}.tar.gz" ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo" done } #差异配置文件 config_diff(){ scp ${CONFIG_DIR}/othe/eiff-config.xml 192.168.1.104:/opt/webroot/${PKG_NAME}/cheyi.config.xml } #测试 code_test(){ curl -s -I http://192.168.1.104/index.html|grep "200" if [ $? -ne 0 ];then shell_unlock; writelog "test erro" && exit; fi } cluster_node_in(){ echo cluster-in } rollback_fun(){ if [ -z $1 ];then echo "rollback [没输入回滚的版本]" shell_unlock; exit fi for node in $ROLLBACK_LIST do ssh $node "if [ -d /opt/webroot/$1 ];then /usr/bin/rm -f /webroot/web-demo && ln -s /opt/webroot/$1 /webroot/web-demo;fi" done } rollback(){ case $1 in list) ssh $ROLLBACK_LIST "ls -l /opt/webroot/*.tar.gz" ;; *) rollback_fun $1 ;; esac } main(){ if [ -f $LOCK_FILE ];then echo "此脚本正在执行" && exit; fi case $1 in deploy) shell_lock; code_get; code_build; code_config; code_tar; code_scp; cluster_node_remove; code_deploy; config_diff; code_test; cluster_node_in; shell_unlock; ;; rollback) shell_lock; rollback $2; shell_unlock; ;; *) usage; esac } main $1 $2
停留在世界边缘,与之惜别