转至: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

三、服务器分布

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 #代码要求授予所有用户读取权限

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

  1. Linux上部署web服务器并发布web项目-转

    Linux上部署web服务器并发布web项目   近在学习如何在linux上搭建web服务器来发布web项目,由于本人是linux新手,所以中间入了不少坑,搞了好久才搞出点成果.以下是具体的详细步骤以 ...

  2. Linux上部署web服务器并发布web项目

    近在学习如何在linux上搭建web服务器来发布web项目,由于本人是linux新手,所以中间入了不少坑,搞了好久才搞出点成果.以下是具体的详细步骤以及我对此做的一些总结和个人的一些见解,希望对跟我一 ...

  3. Linux下查看Web服务器当前的并发连接数和TCP连接状态

    对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...

  4. Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...

  5. DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享

    DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. ...

  6. 网络应用发布到linux上的web服务器上页面上显示麻将牌式字符的问题

    什么是麻将牌式字符,就是中文显示为一个竖立长方形框框里面有四个数字或字母,请看下图中中文,日文和韩文的显示就知道了: 为什么会遇到这个问题? 系统不支持中文,日文和韩文字体. 如何解决: 安装中文字体 ...

  7. Linux 搭建Java web服务器

    未经允许,不得转载 1.jdk的下载与配置 1.1下载 sudo wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45- ...

  8. Linux下嵌入式Web服务器BOA和CGI编程开发

    **目录**一.环境搭建二.相关配置(部分)三.调试运行四.测试源码参考五.常见错误六.扩展(CCGI,SQLite) # 一.环境搭建操作系统:Ubuntu12.04 LTSboa下载地址(但是我找 ...

  9. Linux平台的SVN服务器的配置及搭建

    https://jingyan.baidu.com/article/54b6b9c08b35382d593b477c.html 一.安装SVN   1 在Linux平台上,SVN的软件包名称是subv ...

随机推荐

  1. Tomcat-如何在IDEA启动部署web模板

    IDEA部署工程到Tomcat上运行 1,建议修改web工程对应的Tomcat运行实例名称 2,将需要部署的web工程添加到Tomcat运行实例中,添加或删除 Application context: ...

  2. html图像 表格 列表

    创建图像映射 <img src="/demo/planets.gif" width="145" height="126" alt=&q ...

  3. Python与Javascript相互调用超详细讲解(四)使用PyNode进行Python与Node.js相互调用项(cai)目(keng)实(jing)践(yan)

    目录 前提 安装 使用 const pynode = require('@fridgerator/pynode')的时候动态链接错误 ImportError: math.cpython-39-x86_ ...

  4. Linux 集群 和免秘钥登录的方法。

    /* 1.1.什么是集群? 很多台服务器(计算机)做相同的事,就称之为集群 服务器和服务器之间必须要处于联通状态(linux01和linux02可以相互访问并且传输数据) 服务器的配置和常见的计算机没 ...

  5. springboot加载外部配置文件

    网上搜集和整理如下(自己已验证过) 1. war包在tomcat中加载外部配置文件 war包运行在独立tomcat下时,如何加载war包外部配置application.properties,以达到每次 ...

  6. shell 的here document 用法 (cat << EOF) (转)

    什么是Here Document Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here Docu ...

  7. php截取字符串,避免乱码

    转载请注明来源:https://www.cnblogs.com/hookjc/ 1. 截取GB2312中文字符串 <?php//截取中文字符串 function mysubstr($str, $ ...

  8. Idea快捷键---根据自己使用情况持续更新

    查看接口的实现类 -->ctrl+alt+b 查看继承关系 -->ctrl+h 快速查看上次查看代码的位置: -->ctrl+alt+方向键(注意与intel显卡快捷键的冲突,如有冲 ...

  9. 基于C6678+XC7V690T的6U VPX信号处理卡

    一.概述 本板卡基于标准6U VPX 架构,为通用高性能信号处理平台,系我公司自主研发.板卡采用一片TI DSP TMS320C6678和一片Xilinx公司Virtex 7系列的FPGA XC7V6 ...

  10. 日行一算(Table-文字输出)

    题目 +---+---+---+ | | | | +---+---+---+ | | | | +---+---+---+ | | | | +---+---+---+ 题目描述 上图是一个Mysql查询 ...