Linux通过shell执行自动化部署
背景
通过shell判断是否存在补丁更新,进行自动化的部署
代码
- #!/bin/sh
- #Edit:何彦霆
- #version:1.0. beta
- #执行环境初始化
- source /hxspace/production/bin/setenv.sh
- #变量说明
- #$-外部提供,日期补丁(格式要求BD_2017--)
- #Paths_Way-补丁存放目录
- #Tomcat_Way-tomcat中间件目录
- #Tomcat_Start_Way-tomcat中间件启动文件位置(加载so存在该限制,不能直接使用工程下的启动文件)
- #Env_Wabapp_Way-web应用目录
- #Env_Bus_Way-BUS工程目录
- BD_Data=$
- Paths_Way="/mnt/patches"
- Tomcat_Way="/hxspace/production/server/apache-tomcat-8.5.9"
- Tomcat_Start_Way="/hxspace/production/bin"
- Env_Wabapp_Way="/hxspace/production/webroot"
- Env_Bus_Way="/hxspace/production/bus"
- function Env_WEB_updata()
- {
- WEB_name=$
- WEB_way=$
- #判断Mall_WEB组件更新
- if [ -d ./${WEB_name} ];then
- echo "存在${WEB_name}补丁,准备进行${WEB_name}环境更新"
- #down掉服务器tomcat
- sh ${Tomcat_Way}/bin/shutdown.sh
- sleep 5s
- #清空部署启动目录下,WEB应用文件
- mkdir -p ${Env_Wabapp_Way}/${WEB_way}
- rm -rf ${Env_Wabapp_Way}/${WEB_way}/*
- cp -rf ${Paths_Way}/${BD_Data}/${WEB_name}/* ${Env_Wabapp_Way}/${WEB_way}
- #启动WEB
- sh ${Tomcat_Start_Way}/tomcat_run.sh
- echo "Mall_WEB环境更新完成"
- else
- echo "${WEB_name}更新补丁不存在,${WEB_name}更新结束"
- fi
- }
- function Env_BUS_updata()
- {
- BUS_name=$1
- BUS_port=$2
- BUS_way=$3
- echo ${BUS_name}
- echo ${BUS_port}
- echo ${BUS_way}
- #判断组件更新
- #if [ -d ./${BUS_name}* ];then
- result=`ls -l | grep ${BUS_name}*`
- #if [[ "$result" != "" ]];then
- if [ -d ./${result} ];then
- echo "存在${BUS_name}补丁,准备进行${BUS_name}环境更新"
- #判断Server 进程是否存在 - centos 使用判断监控PID
- Sc_Pid=`netstat -nlp | grep ${BUS_port} | awk '{print $7}' | awk -F "/" '{print $1}'`
- #判断20025端口是否被监听,如果正在监听,kill
- if [ ! $Sc_Pid ]; then
- echo "IS NULL"
- else
- echo "NOT NULL"
- kill -9 $Sc_Pid
- fi
- #拷贝壳子进行覆盖
- mkdir -p ${Env_Bus_Way}/${BUS_way}
- cp -rf './TBAServer(2.1.9.4)'/* ${Env_Bus_Way}/${BUS_way}
- if [ -d ./${BUS_name}_conf ];then
- echo "${BUS_name}_conf存在补丁,准备进行环境更新"
- #清空部署启动目录下,Collect_bus_conf文件
- rm -rf ${Env_Bus_Way}/${BUS_way}/config.ini
- rm -rf ${Env_Bus_Way}/${BUS_way}/classes/*
- rm -rf ${Env_Bus_Way}/${BUS_way}/*.so
- mkdir -p ${Env_Bus_Way}/${BUS_way}
- cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_conf/* ${Env_Bus_Way}/${BUS_way}
- #启动bus-采用重启
- sh ${Env_Bus_Way}/${BUS_way}/restart.sh
- echo "${BUS_name}_conf补丁,更新完成"
- else
- echo "${BUS_name}_conf补丁不存在"
- fi
- if [ -d ./${BUS_name}_lib ];then
- echo "${BUS_name}_lib存在补丁,准备进行环境更新"
- #清空部署启动目录下,${BUS_name}_lib文件
- mkdir -p ${Env_Bus_Way}/${BUS_way}/lib
- rm -rf ${Env_Bus_Way}/${BUS_way}/lib/*
- cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_lib/* ${Env_Bus_Way}/${BUS_way}/lib
- #启动bus-采用重启
- sh ${Env_Bus_Way}/${BUS_way}/restart.sh
- echo "${BUS_name}_lib补丁,更新完成"
- else
- echo "${BUS_name}_lib补丁不存在"
- fi
- if [ -d ./${BUS_name}_classes ];then
- echo "${BUS_name}_classes存在补丁,准备进行环境更新"
- #清空部署启动目录下,${BUS_name}_classes文件
- #工程classes文件同配置文件classes同目录,才用覆盖的方式
- mkdir -p ${Env_Bus_Way}/${BUS_way}/classes
- cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_classes/* ${Env_Bus_Way}/${BUS_way}/classes
- #启动bus-采用重启
- sh ${Env_Bus_Way}/${BUS_way}/restart.sh
- echo "${BUS_name}_classes补丁,更新完成"
- else
- echo "${BUS_name}_classes补丁不存在"
- fi
- else
- echo "${BUS_name}无补丁"
- fi
- }
- #切换至补丁目录
- cd ${Paths_Way}
- #判断补丁目录下是否存在指定补丁
- if [ -d ./$BD_Data ];then
- echo "存在该补丁,准备进行环境更新"
- cd ./$BD_Data
- # BUS 更新,$1 - 补丁文件名 $2 - BUS监听端口 $3 BUS部署路径
- Env_BUS_updata HX_ChenDu_LC_Mall_bus_test 20025 mall_bus
- Env_BUS_updata HX_ChenDu_LC_MallTimer_bus_test 20032 mall_timer
- Env_BUS_updata HX_ChenDu_pmc_bus_test 20028 pmc_bus
- Env_BUS_updata HX_ChenDu_pmc_Collect_bus_test 20042 collector_bus
- #WEB更新,$1 - 补丁文件名 $2 - WEB部署路径
- Env_WEB_updata HX_ChenDu_LC_Mall_WEB_Linux_Test mall
- #Env_WEB_updata HX_ChenDu_pmc_Collect_bus_test mkt
- else
- echo "补丁不存在,更新结束"
- exit 0
- fi
自动通过目录标示判断是否存在该模块补丁,进行补丁的移动合并和更新
Linux通过shell执行自动化部署的更多相关文章
- shell脚本自动化部署服务
shell脚本自动化部署 !/bin/bash #export PATH=$PATH:/export/maven/bin run_flag_dir="/data0/shell/deploy_ ...
- shell脚本自动化部署
由于公司技术部团队较小,没有专门的运维团队,所以运维工作技术部承包了. 一.纯人工部署是这样的: 1. 本地打包:一般 maven clean package 2. 借助xftp上传到服务器对应目录 ...
- jenkins结合ansible用shell实现自动化部署和回滚
最近用jenkins+gitlab+ansible做持续化集成,自动化部署和版本回滚.然而deploy plugin没能做到增量升级和回滚操作,折腾了很久决定自己写个脚本来简单实现. 环境: cent ...
- 登录linux时 shell执行顺序
# .bash_history,.bash_logout,.bash_profile,.bashrc/etc/profile 全局.bash_history 记录当前登录用户历史操作的命令.bash_ ...
- linux下使用shell脚本自动化部署项目
在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个 ...
- jenkins+maven+Tomcat+shell构建自动化部署
https://yq.aliyun.com/articles/685931 1.官网下载war包:jenkins本质上就是一个web应用,直接下载jenkins的war包通过tomcat运行即可.ht ...
- Shell脚本-自动化部署WEB
#! /bin/ ] then echo "#### 参数有误,\$1:构建号必填" exit fi cd /root/workspace/xinya_erp/xinya_web ...
- Shell脚本-自动化部署反向代理、WEB、nfs
部署nginx反向代理三个web服务,调度算法使用加权轮询(由于物理原因只开启两台服务器) AutoNginxNfsService.sh #/bin/bash systemctl status ngi ...
- shell脚本自动化部署XX的案例(附数组使用)
#!/bin/sh #Auto Make install MFS Files # cat <<EOF ++++++++++++++++Welcome To Use Auto Install ...
随机推荐
- Hadoop SSH+IP、SSH+别名 免密登录配置
1.为什么要进行 SSH 无密码验证配置? Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个Da ...
- 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现
上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服 ...
- vue-router如何根据不同的用户给不同的权限
闲聊: 小颖去年在上家公司用的vue1.0之前在做路由这块用的router.map,但是现在vue2.0里已经不能用了,所以之前解决权限问题的例子,小颖也参考不了呜呜 之前看一个美女写的:elemem ...
- thinkphp 单字母函数
在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...
- js中年份、月份下拉框
<select id="year" style="width: 100px;"></select> <select id=&quo ...
- 移动端响应式布局+rem+calc()
1.媒体查询:@media only screen and (max-width: ) {},在最初做pc端时,使用各种媒体查询,因为pc的屏幕分辨率总共就几种,不嫌麻烦的重复使用类名.有很大的缺陷就 ...
- v9.5.2上传缩略图/附件提示“undefined”
把phpcms\modules\attachment\attachments.php中将 if(empty($this->userid)){改成 ...
- 在 Mac OS 上编译 FFmpeg
本文转自:在 Mac OS 上编译 FFmpeg | www.samirchen.com 安装 Xcode 和 Command Line Tools 从 App Store 上安装 Xcode,并确保 ...
- Struts2 Action接收POST请求JSON数据及其实现解析
一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...
- mysql show processlist