JENKINS 打包发布脚本

摘要:
##NOTE发布zjzjc-voting的各个环境,单机版,zjdev环境之外的需要修改各dir从zjdev改到相应的环境##取脚本名字PROGNAME=`basename$0`pacBaseNameArr=serviceNameArr=tomcatPathKeyword=##历史发布目录UPLOAD_DIR=/t/deploy/zjdev/deployableApps##应用部署的目录DEPLOYED_DIR=/t/deploy/zjdev/deployedApps##历史应用目录HISTORY_FOLDER=/t/deploy/zjdev/deployableApps/history/folder##历史的war包HISTORY_WAR=/t/deploy/zjdev/deployableApps/history/warif[-d"$UPLOAD_DIR"]then:elsemkdir-p$UPLOAD_DIRfiif[-d"$DEPLOYED_DIR"]then:elsemkdir-p$DEPLOYED_DIRfiif[-d"$HISTORY_FOLDER"]then:elsemkdir-p$HISTORY_FOLDERfiif[-d"$HISTORY_WAR"]then:elsemkdir-p$HISTORY_WARfi##pacBaseNameArr=##pacBaseNameArr数组长度appArrLen=${#pacBaseNameArr[*]}whiletruedoDATETIME=`date+%Y''%m''%d'-'%H''%M''%S`###checkifthereisnewwaratUPLOAD_DIR####ls-l$UPLOAD_DIR/${APPNAME}*.war˃/dev/null2˃&1#if[$?
#!/bin/bash
#nohup bash check_new_pkgs_dev.sh &
#steps below:

##发布的机器上运行这个脚本


#定时遍历发布包存放路径
#1.遍历所有要发布的包
#2.对于每一个包,找到这个包的时候,停止相应的服务
#3.将deployed下面相应的已发布目录归档到history中
#4.将压缩包解压到deployed下面相应的项目目录中
#5.将压缩包移到history中归档
#6.启动相应服务


###注意进程只能启一个,!!!!!

##NOTE 发布zjzjc-voting的各个环境,单机版,zjdev环境之外的需要修改各dir从zjdev改到相应的环境

##取脚本名字
PROGNAME=`basename $0`

pacBaseNameArr=(zjzc-web-flow zjzc-web-api zjzc-pay zjzc-web-frontEnd zjzc-web-backoffice zjzc-voting-front zjzc-voting zjzc-wze-proxy zjzc-hy-core zjzc-hy-pre zjzc-hy-admin-pre zjzc-backoffice-sso-server zjzc-hy-front zjzc-hy-web-admin zjzc-message-proxy)
serviceNameArr=(tomcat8081 tomcat8082 tomcat8083 no no no tomcat8080 tomcat8084 tomcat8085 tomcat8086 tomcat8087 tomcat8088 no no tomcat8089)
tomcatPathKeyword=(8081 8082 8083 no no no 8080 8084 8085 8086 8087 8088 no no 8089)

##历史发布目录
UPLOAD_DIR=/t/deploy/zjdev/deployableApps

##应用部署的目录
DEPLOYED_DIR=/t/deploy/zjdev/deployedApps

##历史应用目录
HISTORY_FOLDER=/t/deploy/zjdev/deployableApps/history/folder

##历史的war包
HISTORY_WAR=/t/deploy/zjdev/deployableApps/history/war

if [ -d "$UPLOAD_DIR" ]
then
        :
else
        mkdir -p $UPLOAD_DIR
fi


if [ -d "$DEPLOYED_DIR" ]
then
        :
else
        mkdir -p $DEPLOYED_DIR
fi

if [ -d "$HISTORY_FOLDER" ]
then
        :
else
        mkdir -p $HISTORY_FOLDER
fi

if [ -d "$HISTORY_WAR" ]
then
        :
else
        mkdir -p $HISTORY_WAR
fi
##pacBaseNameArr=(zjzc-web-flow zjzc-web-api zjzc-pay zjzc-web-frontEnd zjzc-web-backoffice zjzc-voting-front zjzc-voting zjzc-wze-proxy zjzc-hy-core zjzc-hy-pre zjzc-hy-admin-pre zjzc-backoffice-sso-server zjzc-hy-front zjzc-hy-web-admin zjzc-message-proxy)
##pacBaseNameArr 数组长度
appArrLen=${#pacBaseNameArr[*]}
while true 
do
		DATETIME=`date +%Y''%m''%d'-'%H''%M''%S`

        ### check if there is new war at UPLOAD_DIR ###
        #ls -l $UPLOAD_DIR/${APPNAME}*.war >/dev/null 2>&1

        #if [ $? -eq "0" ]
		
        #then
			for((i=0;i<"$appArrLen";i=i+1))
			do
			
			##UPLOAD_DIR=/t/deploy/zjdev/deployableApps

                
                UPLOAD_DIR_WAR_COUNT=`ls -l $UPLOAD_DIR | grep -E "${pacBaseNameArr[$i]}.*.(rar|zip|war)$" | wc -l`
								
                if [ $UPLOAD_DIR_WAR_COUNT -ne "1" ]
                then
					echo "$DATETIME ${pacBaseNameArr[$i]} has too many pkgs or no pkg, please check it,  now continue! " >>/var/log/${PROGNAME}.out
					continue
                fi
				
				###no need to restart service for static web
				
				###
				
				##serviceNameArr=(tomcat8081 tomcat8082 tomcat8083 no no no tomcat8080 tomcat8084 tomcat8085 tomcat8086 tomcat8087 tomcat8088 no no tomcat8089)
				##静态资源不重启,tomcat重启
				if [ ${serviceNameArr[$i]} != "no" ]
				then
					###stop service
					service ${serviceNameArr[$i]} stop
					
					##每个应用的进程
					procIds=`ps -ef | grep -E java.*${tomcatPathKeyword[$i]} | awk '{printf $2 " "}'`
					procNums=`echo $procIds | wc -w`
					if [ $procNums -gt "1" ]
					then
						echo "service with keyword: ${tomcatPathKeyword[i]} still has process ids: $procIds survived, kill them after 10 seconds"
						sleep 10
						kill $procIds
					fi
					echo "service ${serviceNameArr[$i]} stopped"
				fi
				
				echo "echo UPLOAD_DIR_WAR_COUNT:$UPLOAD_DIR_WAR_COUNT at $DATETIME for ${pacBaseNameArr[$i]}";
				
				### move current tomcat to HISTORY_FOLDER  

                ##DEPLOYED_DIR=/t/deploy/zjdev/deployedApps	

                ##移动当前应用目录 到历史目录下HISTORY_FOLDER=/t/deploy/zjdev/deployableApps/history/folder				
				
				##HISTORY_FOLDER=/t/deploy/zjdev/deployableApps/history/folder
                mv $DEPLOYED_DIR/${pacBaseNameArr[$i]} $HISTORY_FOLDER/${pacBaseNameArr[$i]}_$DATETIME 

				
				##UPLOAD_DIR=/t/deploy/zjdev/deployableApps
				
				##取应用的名字zjzc-web-api-1.1.17.war_20160708-151024
                NEW_WAR_NAME=`ls -l $UPLOAD_DIR/${pacBaseNameArr[$i]}*.* | awk -F"/" '{ print $NF }'`

                ### unzip new war
				
				##应用目录,判断backoffice,后面添加/backoffice
				subfolder="${pacBaseNameArr[$i]}";
				if [ ${pacBaseNameArr[$i]} == "zjzc-web-backoffice" ]
				then
					subfolder="$subfolder/backoffice"
				fi
				
				##DEPLOYED_DIR=/t/deploy/zjdev/deployedApps	
				
				mkdir -p $DEPLOYED_DIR/$subfolder
				
				##把打包好的包,解压到对应目录
                unzip -o $UPLOAD_DIR/$NEW_WAR_NAME -d $DEPLOYED_DIR/$subfolder

				
                ### mov new war to HISTORY_WAR
				
				##UPLOAD_DIR=/t/deploy/zjdev/deployableApps
				
				##把打包好的包移走到/t/deploy/zjdev/deployableApps/history/war
				##HISTORY_WAR=/t/deploy/zjdev/deployableApps/history/war
				
                mv $UPLOAD_DIR/$NEW_WAR_NAME $HISTORY_WAR/${NEW_WAR_NAME}_$DATETIME

				###no need to restart service for static web
				if [ ${serviceNameArr[$i]} != "no" ]
				then
					###start service
					service ${serviceNameArr[$i]} start
					echo "service started"
				fi
                
			done

        #fi
		
		sleep 10
done

免责声明:文章转载自《JENKINS 打包发布脚本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇洛谷 2957 [USACO09OCT]谷仓里的回声Barn EchoesNginx的基础配置管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[12] Jenkins

1. 简介 略... 2. 安装 Jenkins (1) RPM 安装 # a. 如果手头没有 RPM 包,就在清华源挑一个 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.249.3-1.1.noarch.rpm yum install jenkins-2...

jenkins 配置 ssh连接远程服务器并执行相关命令

1、安装 Publish over SSH 插件 2、将将Jenkins所在机子的public_key添加到待部署服务器的root/.ssh/authorized_keys 3、系统管理设置界面拉到底部设置 Publish over SSH设置Passphrase(生成密码的时候输入的密码)、 Key(Private_key) 、ssh server Na...

Jenkins配置MSBuild时使用环境变量

【MSBuild Plugin】插件在使用环境变量有个很奇葩的方式,比如我们通常在Windows的节点机器上,使用WORKSPACE环境变量时,批处理应该这样写%WORKSPACE%,而有时插件确不能正常识别,那么只能换回Linux的写法${WORKSPACE}的形式。 【MSBuild Build File】和【Command Line Argument...

Jenkins+maven+gitlab自动化部署之Jenkins部署(三)

 本章开始正式搭建Jenkins: 公司现在使用的jenkins版本是2.150.3,但是本次实验安装的版本我们选择最新的2.164.3(当然,当你阅读这篇文章时,此版本已经不是最新),jenkins有多种启动方式,这里就不一一介绍,本问采用yum方式部署。 一、配置yum源 [tchua@centos01 ~]$ sudo wget -O /etc/yu...

jenkins 配置 git拉取代码

### 前言 jenkins 服务器配置可以拉取gitlab 代码:   将jenkins服务器(jenkins启动用户下)公钥文件 上传到gitlab进行认证 一、点击"源码管理",选择 git  二、系统管理 --> Global Tool Configuration<为访问git服务添加认证-----------------上图 Cre...

CVE-2018-1000861复现

刚好群里有个朋友问到这个然后就复现了一下 1. 漏洞描述 Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。 通过这个漏洞,我们可以找到很多可供利用的利用链。其中最严重的就是绕过Groovy沙盒导致未授权用户可执行任意命令...