• linux 平台实现 web 服务器的自动化发布 (纯shell 版本,存在ssh 不能自动退出问题,待解决)


    转至:https://www.cnblogs.com/vmsky/p/13824172.html

    背景说明

    1、集团OA系统上线,web App 部署在6台服务器中,因项目初期,每次更新都需要进行大量的部署操作。操作费事费力部署,还容易出错,且缺乏通知机制。针对这一现状,计划通过脚本来实现半自动化的发布工作(因为无法解决自动化打包问题,只能采用半自动化方式了)

    一:环境说明

    1. OS:RHL 7.2
    2. 中间件: tomcat 7.0

    二、开发语言:

    1. linux Shell
    2. Python 3.7

    三、服务器分布

    PRDAPPvlxcndsz01ekpp1
    PRD APP vlxcndsz01ekpp2
    PRD APP vlxcndsz01ekpp3
    PRD APP vlxcndsz01ekpp4
    PRD APP vlxcndsz01ekpp5
    PRD APP vlxcndsz01ekpp6 (执行部署脚本)四、环境准备

    四、思路

    1、从其中一台服务器远程到,挨个轮询到对应服务器,调用服务器shell 命令完成应用部署。

    五、基础环境准备

    1、服务器免登陆配置 参见https://www.cnblogs.com/vmsky/p/13726955.html

    2、软件包存放在共享目录

    六、linux shell 代码

    #!/bin/bash
    #mkdir /deploy/tmp/EKP
    #Node List ,存放用用服务器,IP地址用空格分割
    PRD_LIST=" 10.196.71.8 10.196.71.13 "
    #Shell Env,存放于bamboo 服务器vim
    SHELL_NAME=$0
    SHELL_DIR="/data/EKP_Attachment"
    SHELL_LOG="${SHELL_DIR}/DeployShell/logs/${SHELL_NAME}.log"
     
    #Code Env,存放于bamboo 服务器
    PRO_NAME="ekp"
    # CODE_DIR="/deploy/code/${PRO_NAME}" #代码存放路径,每次更新前同步仓库最新的代码
    # CONFIG_DIR="/deploy/config/$PRO_NAME" #该目录下的base目录用于存放最基础的代码的配置文件
    # TMP_DIR="/deploy/tmp"
    # TAR_DIR="/deploy/tar/$PRO_NAME"
    LOCK_FILE="${SHELL_DIR}/DeployShell/tmp/$0.lock" #用于判定当前脚本是否在运行
    
    Keep_Logs(){
        LOGINFO=$1
        # Date/Time Veriables
        LOG_DATE='date "+%Y-%m-%d"'
        LOG_TIME='date "+%H-%M-%S"'
        CDATE=$(date "+%Y-%m-%d")
        CTIME=$(date "+%H-%M-%S")
        echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" 
        echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" >> ${SHELL_LOG}
        }
    
    usage(){
        Keep_Logs  $"Usage: $0 { [deploy | rollback] [DEV |PRD |UAT | MASTER ] [ version ]}"
        Keep_Logs  $"Example: $0  rollback DEV  1.0.0 "
        }
     
       
    Lock_Shell(){
        touch ${LOCK_FILE}
        Keep_Logs "Info:Create lockfile ${LOCK_FILE}"
    }
     
     
    Unlock_Shell(){
        Keep_Logs "Info:……remove ${LOCK_FILE}"
        rm -f ${LOCK_FILE}
        Keep_Logs "Info:removed ${LOCK_FILE}"
    }
    
    
    #检查web 服务器是否部署成功,如果30分钟还不可以被访问,则认为服务器可能存在问题。
    URL_Test(){
        local node=$1
        local URL="http://$node:8080/login.jsp"
        Keep_Logs "Info:…… URL_Test $URL";
        # curl -s --head $URL | grep "200 OK";
        num=1
        curl -s --head $URL | grep "200 OK";
        while ([ $? -eq 1 ] && [ "${num}" -lt "181"  ]); do
           echo ${num};
           if [ ${num} -eq 120 ]
           then
                echo "启动超时";
                Keep_Logs "ERROR: Time out,failed to start app on ${node} ";
                break;
           fi
           num=$[${num}+1];
           sleep 10s;
           Keep_Logs "Info:$URL is not online,will check about 9 s later";
           curl -s --head $URL | grep "200 OK";
        done
        if [ ${num} -le 120 ]
           then
                Keep_Logs "INFO: succeed start Server ${node} ";
           fi
    }
    
    
    Deploy_Code(){
        local node=$1;
        Keep_Logs "Info:Deploy_Code $1"
        # ssh $node "cd /opt/ && tar xfz ${PKG_NAME}.tar.gz"
        ssh -fn ekp@$node "source ~/.bash_profile 
        &&cd /data/EKP_Attachment/ekpcode 
        && unzip ${PKG_NAME}.zip -d /data/ekp/ 
        && rm -f /data/ekp/$PRO_NAME 
        && ln -s /data/ekp/${PKG_NAME} /data/ekp/${PRO_NAME} 
        && killall -9 java >/dev/null 2>&1  
        && sleep 10s 
        && cd /data/ekp/linux64/  
        && ./start-normal64.sh >/dev/null 2>&1 &";
        echo "sleep 10 秒钟";
        sleep 10s;
        URL_Test ${node};
    }
     
     
    main(){
        #判定操作方式
        #部署版本
        PKG_NAME=$1
    
        Keep_Logs "Info:Begin"
        # 锁定判断
        if [ -f ${LOCK_FILE} ];then
            Keep_Logs "WARN:Deploy is running,you can try it later."  && exit;   
        else
            Lock_Shell;
            Keep_Logs "INFO:Deploy Server list is:$PRD_LIST";
            for node in $PRD_LIST;do
                Deploy_Code $node;
            done
        fi
        
        Unlock_Shell;
        }
    
    main $1 
    
    
    #代码要求授予所有用户读取权限
  • 相关阅读:
    Balanced Number [ZOJ 3416]
    动态树
    Jason的特殊爱好 [FZU 2113]
    Raney引理
    Tri Tiling [POJ 2663]
    糖尿病的虾青素+胰岛素疗法 (转)
    JAVASCRIPT 开发工具:aptana ,WebStorm
    众志和达,英文SOUL 存储与数据安全提供商
    健身音乐及其它
    nodejs + CompoundJS 资源
  • 原文地址:https://www.cnblogs.com/my-first-blog-lgz/p/13825006.html
Copyright © 2020-2023  润新知