linux 平台实现 web 服务器的自动化发布 (纯shell 版本,存在ssh 不能自动退出问题,待解决)
转至:https://www.cnblogs.com/vmsky/p/13824172.html
背景说明
1、集团OA系统上线,web App 部署在6台服务器中,因项目初期,每次更新都需要进行大量的部署操作。操作费事费力部署,还容易出错,且缺乏通知机制。针对这一现状,计划通过脚本来实现半自动化的发布工作(因为无法解决自动化打包问题,只能采用半自动化方式了)
一:环境说明
- OS:RHL 7.2
- 中间件: tomcat 7.0
二、开发语言:
- linux Shell
- 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 不能自动退出问题,待解决)的更多相关文章
- Linux上部署web服务器并发布web项目-转
Linux上部署web服务器并发布web项目 近在学习如何在linux上搭建web服务器来发布web项目,由于本人是linux新手,所以中间入了不少坑,搞了好久才搞出点成果.以下是具体的详细步骤以 ...
- Linux上部署web服务器并发布web项目
近在学习如何在linux上搭建web服务器来发布web项目,由于本人是linux新手,所以中间入了不少坑,搞了好久才搞出点成果.以下是具体的详细步骤以及我对此做的一些总结和个人的一些见解,希望对跟我一 ...
- Linux下查看Web服务器当前的并发连接数和TCP连接状态
对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...
- Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)
一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...
- DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享
DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. ...
- 网络应用发布到linux上的web服务器上页面上显示麻将牌式字符的问题
什么是麻将牌式字符,就是中文显示为一个竖立长方形框框里面有四个数字或字母,请看下图中中文,日文和韩文的显示就知道了: 为什么会遇到这个问题? 系统不支持中文,日文和韩文字体. 如何解决: 安装中文字体 ...
- Linux 搭建Java web服务器
未经允许,不得转载 1.jdk的下载与配置 1.1下载 sudo wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45- ...
- Linux下嵌入式Web服务器BOA和CGI编程开发
**目录**一.环境搭建二.相关配置(部分)三.调试运行四.测试源码参考五.常见错误六.扩展(CCGI,SQLite) # 一.环境搭建操作系统:Ubuntu12.04 LTSboa下载地址(但是我找 ...
- Linux平台的SVN服务器的配置及搭建
https://jingyan.baidu.com/article/54b6b9c08b35382d593b477c.html 一.安装SVN 1 在Linux平台上,SVN的软件包名称是subv ...
随机推荐
- 通俗讲解IP地址的端口
========================================================================================= 在我看来,学习jav ...
- new JSONObject 无异常卡顿【Maven+Idea 导包不更新的小坑】
问题描述 今天在使用JSONObject过程中出现了一个非常不可思议的现象,我Junit测试没有问题,但是就是打开服务器运行的时候,结果就是出不来,经过多次测试发现代码竟然卡在了new JSONObj ...
- Ubuntu好用的文本编辑器-SciTE Text Editor
Ubuntu下除了gedit之外,还可以使用SciTE编辑器,非常方便,安装 sudo apt install scite 不过刚刚装好在中文环境下还是不能够用的,因为会有中文乱码,还有很多设置也不符 ...
- go基础——switch语法
package main import "fmt" /* switch语法结构: switch 变量名 { case 数值1:分支1 case 数值2:分支2 ... defaul ...
- 简述keepalived工作原理
1.Keepalived 定义 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器 ...
- 虫师Selenium2+Python_12、BDD框架之Lettuce入门
http://www.cnblogs.com/fnng/p/3415609.html P293--简介: TDD(Test-Drivern-Development)测试驱动开发 ATDD(Accept ...
- postman中环境变量的设置方法、使用方法和实际中常见使用场景
文中共介绍2种添加环境变量的方法.2种使用环境变量的方法,以及不同方法的适用范围. 文中给出了环境变量的两种常见使用场景:切换环境.动态参数关联(前一个请求的响应作为下一个请求的入参) 2种添加环境变 ...
- ScaleFlux CSD 2000 在携程的应用实践
一.业界背景与现状 近些年来,有三件事实在业界同时发生: 1. 业务的发展朝着"生产"和"使用"海量增长数据的方向演进. 2. 摩尔定律 的 ...
- PHP+mysql真题
PHP+mysql真题 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. [真题215] 按要求写出SQL实现. ...
- opencv笔记--HOGDescriptor
特征描述提取图像区域上有用信息而忽略无用信息,不同目标下有用信息与无用信息定义不同.这里提取的有用信息用于分类器输入并期望产生正确的分类. HOG(Histogram of Oriented Grad ...