转至: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. mysql加强(3)~分组(统计)查询

    一.分组(统计) 查询 1.语法 : select [distinct] *| 分组字段1[别名] [,分组字段2[别名],...] | 统计函数 from 表名 [别名] [where 条件(s)] ...

  2. 一起来找茬:记一起 clang 开启 -Oz 选项引发的血案

    作者:字节跳动终端技术 -- 刘夏 前言 笔者来自字节跳动终端技术 AppHealth (Client Infrastructure - AppHealth) 团队,在工作中我们会对开源 LLVM 及 ...

  3. kdj

    随机指标KDJ一般是用于股票分析的统计体系,根据统计学原理,通过一个特定的周期(常为9日.9周等)内出现过的最高价.最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成 ...

  4. ABC220H - Security Camera

    考虑折半,将点按照标号是否 \(\le \frac{n}{2}\) 分成两个集合 \(S_1, S_2\). 首先原问题的形式有点奇怪,我们不妨统计没有被覆盖覆盖的边为偶数条的情况. 这样一来问题转化 ...

  5. 【源码】Redis命令处理过程

    本文基于社区版Redis 4.0.8   1.命令解析 Redis服务器接收到的命令请求首先存储在客户端对象的querybuf输入缓冲区,然后解析命令请求的各个参数,并存储在客户端对象的argv和ar ...

  6. tcp 中 FLAGS字段,几个标识:SYN, FIN, ACK, PSH, RST, URG.

    在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段.它们的含义是: 1.SYN表示建立 ...

  7. Spring学习七:ComponentScan注解

    今天主要从以下几个方面来介绍一下@ComponentScan注解: @ComponentScan注解是什么 @ComponentScan注解的详细使用 1.ComponentScan注解是什么 其实很 ...

  8. Java之static静态关键字详解|final关键字详解

    前言 在Java语言中,static表示"静态"的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法 ...

  9. iOS9新特性之常见关键字

    /* nullable:1.怎么使用(语法) 2.什么时候使用(作用) nullable作用:可能为空 nullable 语法1 @property (nonatomic, strong, nulla ...

  10. 【Android珍藏】推荐10个炫酷的开源库【转】

    感谢大佬:https://www.jianshu.com/p/d608f0228fd4 前言 技术群里面经常有人问到一些炫酷的UI效果实现方法,有时候我都是给一个相同或者相似效果的Github链接,有 ...