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

  1. #!/bin/bash
  2. #mkdir /deploy/tmp/EKP
  3. #Node List ,存放用用服务器,IP地址用空格分割
  4. PRD_LIST=" 10.196.71.8 10.196.71.13 "
  5. #Shell Env,存放于bamboo 服务器vim
  6. SHELL_NAME=$0
  7. SHELL_DIR="/data/EKP_Attachment"
  8. SHELL_LOG="${SHELL_DIR}/DeployShell/logs/${SHELL_NAME}.log"
  9.  
  10. #Code Env,存放于bamboo 服务器
  11. PRO_NAME="ekp"
  12. # CODE_DIR="/deploy/code/${PRO_NAME}" #代码存放路径,每次更新前同步仓库最新的代码
  13. # CONFIG_DIR="/deploy/config/$PRO_NAME" #该目录下的base目录用于存放最基础的代码的配置文件
  14. # TMP_DIR="/deploy/tmp"
  15. # TAR_DIR="/deploy/tar/$PRO_NAME"
  16. LOCK_FILE="${SHELL_DIR}/DeployShell/tmp/$0.lock" #用于判定当前脚本是否在运行
  17.  
  18. Keep_Logs(){
  19. LOGINFO=$1
  20. # Date/Time Veriables
  21. LOG_DATE='date "+%Y-%m-%d"'
  22. LOG_TIME='date "+%H-%M-%S"'
  23. CDATE=$(date "+%Y-%m-%d")
  24. CTIME=$(date "+%H-%M-%S")
  25. echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}"
  26. echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" >> ${SHELL_LOG}
  27. }
  28.  
  29. usage(){
  30. Keep_Logs $"Usage: $0 { [deploy | rollback] [DEV |PRD |UAT | MASTER ] [ version ]}"
  31. Keep_Logs $"Example: $0 rollback DEV 1.0.0 "
  32. }
  33.  
  34. Lock_Shell(){
  35. touch ${LOCK_FILE}
  36. Keep_Logs "Info:Create lockfile ${LOCK_FILE}"
  37. }
  38.  
  39. Unlock_Shell(){
  40. Keep_Logs "Info:……remove ${LOCK_FILE}"
  41. rm -f ${LOCK_FILE}
  42. Keep_Logs "Info:removed ${LOCK_FILE}"
  43. }
  44.  
  45. #检查web 服务器是否部署成功,如果30分钟还不可以被访问,则认为服务器可能存在问题。
  46. URL_Test(){
  47. local node=$1
  48. local URL="http://$node:8080/login.jsp"
  49. Keep_Logs "Info:…… URL_Test $URL";
  50. # curl -s --head $URL | grep "200 OK";
  51. num=1
  52. curl -s --head $URL | grep "200 OK";
  53. while ([ $? -eq 1 ] && [ "${num}" -lt "181" ]); do
  54. echo ${num};
  55. if [ ${num} -eq 120 ]
  56. then
  57. echo "启动超时";
  58. Keep_Logs "ERROR: Time out,failed to start app on ${node} ";
  59. break;
  60. fi
  61. num=$[${num}+1];
  62. sleep 10s;
  63. Keep_Logs "Info:$URL is not online,will check about 9 s later";
  64. curl -s --head $URL | grep "200 OK";
  65. done
  66. if [ ${num} -le 120 ]
  67. then
  68. Keep_Logs "INFO: succeed start Server ${node} ";
  69. fi
  70. }
  71.  
  72. Deploy_Code(){
  73. local node=$1;
  74. Keep_Logs "Info:Deploy_Code $1"
  75. # ssh $node "cd /opt/ && tar xfz ${PKG_NAME}.tar.gz"
  76. ssh -fn ekp@$node "source ~/.bash_profile \
  77. &&cd /data/EKP_Attachment/ekpcode \
  78. && unzip ${PKG_NAME}.zip -d /data/ekp/ \
  79. && rm -f /data/ekp/$PRO_NAME \
  80. && ln -s /data/ekp/${PKG_NAME} /data/ekp/${PRO_NAME} \
  81. && killall -9 java >/dev/null 2>&1 \
  82. && sleep 10s \
  83. && cd /data/ekp/linux64/ \
  84. && ./start-normal64.sh >/dev/null 2>&1 &";
  85. echo "sleep 10 秒钟";
  86. sleep 10s;
  87. URL_Test ${node};
  88. }
  89.  
  90. main(){
  91. #判定操作方式
  92. #部署版本
  93. PKG_NAME=$1
  94.  
  95. Keep_Logs "Info:Begin"
  96. # 锁定判断
  97. if [ -f ${LOCK_FILE} ];then
  98. Keep_Logs "WARN:Deploy is running,you can try it later." && exit;
  99. else
  100. Lock_Shell;
  101. Keep_Logs "INFO:Deploy Server list is:$PRD_LIST";
  102. for node in $PRD_LIST;do
  103. Deploy_Code $node;
  104. done
  105. fi
  106.  
  107. Unlock_Shell;
  108. }
  109.  
  110. main $1
  111.  
  112. #代码要求授予所有用户读取权限

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. 通俗讲解IP地址的端口

    ========================================================================================= 在我看来,学习jav ...

  2. new JSONObject 无异常卡顿【Maven+Idea 导包不更新的小坑】

    问题描述 今天在使用JSONObject过程中出现了一个非常不可思议的现象,我Junit测试没有问题,但是就是打开服务器运行的时候,结果就是出不来,经过多次测试发现代码竟然卡在了new JSONObj ...

  3. Ubuntu好用的文本编辑器-SciTE Text Editor

    Ubuntu下除了gedit之外,还可以使用SciTE编辑器,非常方便,安装 sudo apt install scite 不过刚刚装好在中文环境下还是不能够用的,因为会有中文乱码,还有很多设置也不符 ...

  4. go基础——switch语法

    package main import "fmt" /* switch语法结构: switch 变量名 { case 数值1:分支1 case 数值2:分支2 ... defaul ...

  5. 简述keepalived工作原理

    1.Keepalived 定义 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器 ...

  6. 虫师Selenium2+Python_12、BDD框架之Lettuce入门

    http://www.cnblogs.com/fnng/p/3415609.html P293--简介: TDD(Test-Drivern-Development)测试驱动开发 ATDD(Accept ...

  7. postman中环境变量的设置方法、使用方法和实际中常见使用场景

    文中共介绍2种添加环境变量的方法.2种使用环境变量的方法,以及不同方法的适用范围. 文中给出了环境变量的两种常见使用场景:切换环境.动态参数关联(前一个请求的响应作为下一个请求的入参) 2种添加环境变 ...

  8. ScaleFlux CSD 2000 在携程的应用实践

    一.业界背景与现状 近些年来,有三件事实在业界同时发生:     1.  业务的发展朝着"生产"和"使用"海量增长数据的方向演进.     2.  摩尔定律 的 ...

  9. PHP+mysql真题

    PHP+mysql真题 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. [真题215] 按要求写出SQL实现. ...

  10. opencv笔记--HOGDescriptor

    特征描述提取图像区域上有用信息而忽略无用信息,不同目标下有用信息与无用信息定义不同.这里提取的有用信息用于分类器输入并期望产生正确的分类. HOG(Histogram of Oriented Grad ...