转至: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. springmvc请求处理过程

    springmvc请求的处理流程 1)发起some.do 2)tomcat(web.xml-----url-pattern知道*.do的请求给DispatcherServlet) 3)Dispatch ...

  2. 源码分析axios(1)~源码分析、模拟axios的创建

    ■ 查看源码发现,起初axios[instance=bind(Axios.prototype.request, context);]是一个函数, 但后续[ utils.extend(instance, ...

  3. kubernetes之部署traefik-ingress分为http和https

    1 理解Ingress 简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上.Ingress相当于nginx.apache等负载均衡方 ...

  4. CaCl2 项目介绍。

    一 是什么? 中国自然语言处理(NLP)研究项目. 二 主要功能? 从互联网获取的大量文本数据,结合自研力量进行分析.将数据重新格式化为大量条目,目录,并根据金融行业分类标准对这些条目进行了分类. 三 ...

  5. shiro 快速入门详解。

    package com.aaa.lee.shiro; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; i ...

  6. 如何在pyqt中实现亚克力磨砂效果的QLabel

    前言 Windows10 在 UWP 应用中支持亚克力画刷,可以在部件的底部绘制亚克力效果的背景图.下面我们使用 QLabel 来模拟这个磨砂过程. 实现方法 MSDN 文档中介绍了亚克力材料的配方, ...

  7. MybatisPlus多表连接查询

    一.序言 (一)背景内容 软件应用技术架构中DAO层最常见的选型组件为MyBatis,熟悉MyBatis的朋友都清楚,曾几何时MyBatis是多么的风光,使用XML文件解决了复杂的数据库访问的难题.时 ...

  8. 利用.htaccess隐藏html和php后缀

    假设有个网页http://www.example.com/index.html或者http://www.example.com/index.php.如果我们想要隐藏.html后缀或者.php后缀,那么 ...

  9. 自定义带图片和文字的Button的排版--陈棚

    自定义button,动态加载图片与文字 [footView addSubview:btnAllChoose]; [btnAllChoose setTitle:str forState:UIContro ...

  10. 通过示例学习PYTORCH

    注意:这是旧版本的PyTorch教程的一部分.你可以在Learn the Basics查看最新的开始目录. 该教程通过几个独立的例子较少了PyTorch的基本概念. 核心是:PyTorch提供了两个主 ...