ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2020-10-16 07:00:44  阅读:248  来源: 互联网

标签:node web shell Logs PRD Keep && linux NAME


背景说明

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

一:环境说明

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

二、开发语言:

  1. linux Shell
  2. Python 3.7

三、服务器分布

PRD APP vlxcndsz01ekpp1
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 


#代码要求授予所有用户读取权限


标签:node,web,shell,Logs,PRD,Keep,&&,linux,NAME
来源: https://www.cnblogs.com/vmsky/p/13824172.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有