Jenkins自动部署Shell脚本

注意:本脚本用于Shell脚本分享,因环境不同,不可直接用于其它环境部署用。

#!/bin/bash
#时间:2019年7月29日
#作者:肖山
#微信:helpxiaoshan
#用途:用于XXXX UAT环境ATG商城项目Jenkins自动部署使用。

############ 使用注意事项:#################################################################################

注意1:需修改目标主机/etc/ssh/sshd_config,MaxSessions 50(建议值),重新加载sshd服务配置。

注意2:脚本后必须跟参数,参数为 项目名,例如: sh deploy.sh store

注意3:50行,sleep 15 秒,20后台进程 x 15 秒=300s,检测时间共300秒,当有项目的tomcat启动时间超过300秒,则增大该数值。

############################################################################################################

starttime=date +‘%Y-%m-%d %H:%M:%S‘
project_name=$1 #第一个参数为项目名

[ $1 ] || echo "ERROR: No project_name!" #判断$1为空,则退出脚本呢!
[ $1 ] || exit 1

if [ $project_name = "store" ];then
#第一步,停掉目标项目进程。
ip=192.168.220.34
echo "INFO: project_name is store"
echo -e "\n"
echo "INFO: Begain stop store..."
ssh -n -l oracle $ip "pgrep -f -l store | grep -v ‘tail -f‘ | grep -v grep | cut -d‘ ‘ -f1 | xargs kill -9" >>/dev/null 2>&1
stat=$?
#echo $stat
[ $stat -eq 0 ] && echo "INFO: store is been killed"
[ $stat -ne 0 ] && echo "INFO: store is not started"

#第二步,删除旧代码并清除缓存。
echo -e "\n"
echo "INFO: Begain delete old file and cache..."
ssh -n -l oracle $ip "rm -rf /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/stage/prod_lockserver.ear/prod_lockserver.ear"
ssh -n -l oracle $ip "rm -rf /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/tmp"
ssh -n -l oracle $ip "rm -rf /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/cache"
echo "INFO: already delete old file and cache"

#第三步,拷贝最新代码到项目路径下。
echo -e "\n"
echo "INFO: Begain copy code to project host..."
scp -qrp /file/uat_ears/prod_lockserver.ear [email protected]$ip:/home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/servers/prod_lockserver/stage/prod_lockserver.ear
[ $stat -eq 0 ] && echo "INFO: copy Success"
[ $stat -ne 0 ] && echo "ERROR: copy failed!!!" && exit 1

#第四步,启动项目进程
echo -e "\n"
echo "INFO: Begain start store Weblogic"
ssh -n -l oracle $ip "nohup /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/bin/startManagedWebLogic.sh prod_lockserver http://192.168.220.35:7001 -Djava.rmi.server.hostname=192.168.220.34 -Dguangda.merchant.parameter.file.path=/file/cebbank/ceb_merchant.properties -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8466,server=y,suspend=n -Djava.compiler=NONE -Datg.dynamo.server.name=prod_lockserver -Xms6G -Xmx6G -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:InitiatingHeapOccupancyPercent=45 -XX:ConcGCThreads=4 -XX:G1ReservePercent=15 -XX:+DisableExplicitGC -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/oracle/store_gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/oracle/store_heap.bin -Dcom.sun.management.jmxremote.port=12345 -Djava.rmi.server.hostname=192.168.220.34 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder -Datg.dynamo.data-dir=/home/oracle/ATG-Data/ > /home/oracle/output/logs/prod_lockserver.log &"
echo "INFO: Weblogic starting..."

#第五步,启动精确检测weblogic启动完毕的后台进程
echo -e "\n"
>${project_name}_${ip}_status.log  #清空检测Weblogic是否启动的日志文件内容
for i in `seq 20`    #启动10个检测Weblogic启动日志后台进程,当后台进程被杀掉后,日志才会被写入log文件
do
    ssh -n -l oracle $ip "tail -fn 0 /home/oracle/output/logs/prod_lockserver.log" | grep "The server started in RUNNING mode" >>${project_name}_${ip}_status.log &
done

#检测Weblogic启动状态的变量stats1,检测机制为检测目标服务器上的项目日志文件,是否新打印出"The server started in RUNNING mode";
t=0
stats1=0
while [ $stats1 -eq 0 ]
do
    sleep 15   # 10个后台进程,20x15=300s,检测时间共300秒,当有项目的tomcat启动时间超过100秒,则增大该数值。
    let t+=15  #t=`expr $t + 10`
    echo "检测 $project_name Weblogic 是否启动完毕,已用时 $t 秒..."
    echo -e "\n"
    ssh -n -l oracle $ip "pgrep -f ‘tail -fn‘ | head -n 1 | xargs kill -9"  # kill掉一个后台进程
    [ $? -eq 0 ] && echo "INFO: 成功杀掉 tail -fn 后台进程。"
    stats1=`cat ${project_name}_${ip}_status.log | wc -l `   # 每kill一个后台进程,状态文件就更新一次
    #[ $stats1 -eq 0 ] && echo "INFO:未检测到 started in RUNNING mode 关键词。"
    #[ $stats1 -ge 1 ] && echo "INFO:成功检测到 started in RUNNING mode 关键词。"
done

ssh -n -l oracle $ip "pgrep -f ‘tail -fn‘ | xargs kill -9" # kill掉剩余无用后台进程。
echo -e "\n"
echo "INFO:检测到启动关键词:"
head -n 1 ${project_name}_${ip}_status.log  #  输出抓取的 started in RUNNING mode 日志。
echo -e "\n"
echo "打印最后864行日志"
ssh -n -l oracle $ip "tail -n 864 /home/oracle/output/logs/prod_lockserver.log"

fi

#计算脚本运行总时间
endtime=date +‘%Y-%m-%d %H:%M:%S‘
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "本次更新用时: "$((end_seconds-start_seconds))"s"

原文地址:https://blog.51cto.com/helpxiaoshan/2424619

时间: 2024-10-11 01:23:12

Jenkins自动部署Shell脚本的相关文章

使用Jenkins 自动部署发布

使用Jenkins自动部署发布,继Jenkins部署篇后: #注意:jenkins路径会有差异,不用在意这个,同一个版本部署2次,发现了2个不同的目录结构,很诧异. jenkins build玩war包的存放目录:/data/jenkins/workspace/simple/target 自动发布的脚本存放路径:/data/jenkins/jobs/simple 脚本的内容: 脚本使用的是scp命令,当然也可以使用wget等. [[email protected] simple]# cat de

应用maven自动部署的脚本

@(编程) 最近写了一个自动部署的脚本,可以一键部署到测试服务器或者生产服务器上,包括一个函数脚本和一个调用脚本,比较简单,记录如下. 特点如下: 部署前自动备份 可以部署tomcat项目和java项目 支持参数,可以部署测试环境和生产环境 function.sh #!/bin/bash ##author:zch ##date:20171116 host=192.168.163.50 if [ "$1"x = "online"x ]; then host=111.1

服务器做了格式化后(ip没变),jenkins自动部署报错

jenkins自动部署报错如下:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Some

centos7 开机自动执行shell脚本

centos7 开机自动执行shell脚本 90十80 关注 2018.12.23 09:37 字数 309 阅读 485评论 0喜欢 0 自己新建一个脚本,如centnet-service.sh 经过后面的几个步骤后,这个脚本在开机的时候会执行,在这个脚本里面可以写你开机的时候想执行的命令,如启动tomcat,oracle等服务 在脚本中输入启动服务的命令,如(开机启动tomcat): #!/bin/bash export JDK_HOME=/home/java/jdk1.8.0_91 exp

Glassfish Payara + jenkins自动部署脚本

配置文件内的列需要依次添加cat AutoDeployConf.conf #application domain port target contextroot app_name package_path passwordfiletest domain9 4808 test test test /test.war /test_adminpassword.txt 脚本内容,执行方式./auto_deploy_glassfish.sh applicationcat auto_deploy_glass

jenkins自动部署tomcat

关于部署的3种思路: 远程部署(jenkins编译部署到远程服务器): 安装ssh插件 ssh插件配置 添加远程jenkins服务器节点: 本地部署(与jenkins在同一服务器): 关于maven构建的两种选择: 直接选择maven插件 自带插件(): 插件配置(或直接新建maven项目):   添加shell编译过程,通过shell调用服务器的maven环境 jenkins配置: export BUILD_ID=XXXXXX # 必须得加,原因未知,否则无法启动tomcat export p

使用Jenkins自动部署nodejs应用

想必部署过nodejs应用的朋友都有过这样的经历: 1.通过ssh登录服务器 2.进入nodejs目录 3.执行:git pull 命令拉取最新代码 4.执行:npm install 安装新依赖 5.执行:pm2 restart all 重新启动所有nodejs进程 如果我们只有一台机器,并且更新不是很频繁,似乎这样的操作还是可以接受,但是如果我们有4台nodejs应用的服务器,每次的代码改动将是灾难! 好在我们有Jenkins帮助我们做这些事情,Jenkins是一个可以自动远程部署,执行远程脚

Centos开机自动执行shell脚本启动tomcat服务器

有时候需要在Centos系统启动之后自动完成项目的启动,项目部署在tomcat中时,如果Centos关机后开机,各个项目也就已经被停掉了,然后需要自己一个一个的手动去开启各个项目对应的tomcat服务器,想想都比较麻烦,那么如何才能实现,当Centos启动之后,项目就自动也跟着启动了呢? 下面就介绍下Centos如何开机是自动启动shell脚本,通过shell脚本的命令来启动项目对应的tomcat服务器. 一.切换到/etc/init.d目录下 cd /etc/init.d 二.制作sh脚本:v

Jenkins自动部署发布Java代码(完整教程)

一.需求 Jenkins大多数情况下都是用来部署Java项目,上一篇博客已经写了自动打包Java项目,但在现实应用中,Jenkins很强大的,可以做到自动打包发布Java项目.这篇文章,将引导大家完成完整的Java项目(自动发布代码功能)! 二.实验环境 三.实验步骤 1.搭建tomcat 服务(在192.168.22.129服务器上) (1)先安装jdk1.8 jdk和tomcat 下载地址: https://pan.baidu.com/s/1URk88Tp2Io0eUEMo1WpoCg 提取