jar 程序发布脚本
2016-05-27 18:44
288 查看
Fish-ChatServer-CI.sh
server_list.txt
fish_public.sh
#!/bin/bash #发布脚本设置部分 #定义需要操作的房间聊天服务 deploy_info=("SA0133,chatserver-ci1,10001" "SA0133,chatserver-ci2,10002" "SA0133,chatserver-ci3,10003" "SA0133,chatserver-ci4,10004") #deploy_info=("SA0133,chatserver-ci1,20000") #获取脚本所存放目录 cd `dirname $0` bash_path=`pwd` #脚本名 me=$(basename $0) source ${bash_path}/fish_public.sh
server_list.txt
"SA0131" "192.168.0.131" "22" "SA0133" "192.168.0.133" "22
fish_public.sh
#!/bin/bash # 定义red_function,用于输出错误信息 function red_echo () { #用法: red_echo "内容" local what=$* echo -e "\e[1;31m ${what} \e[0m" } # 定义green_function,用于输出正确信息 function green_echo () { #用法: green_echo "内容" local what=$* echo -e "\e[1;32m ${what} \e[0m" } # 定义ssh,scp参数 conn_para="-o StrictHostKeyChecking=no -o ConnectTimeout=60" ssh_cmd="ssh ${conn_para}" scp_cmd="scp ${conn_para}" # jenkins站点名称 jenkins_site="jenkins.xxx.net" # 获取jenkins项目名 jenkins_item=$(echo $me|awk -F'.' '{print $1}') # 定义jenkins本地目录 jenkins_dir="/data/jenkins_home/fish/workspace" # 获取jar项目名称 jar_item=$(echo $jenkins_item | awk -F'-' '{print $2}' | tr 'A-Z' 'a-z') # 定义jar存放目录 jar_dir="/usr/local/jars" # 定义md5地址和端口 md5_site="192.168.0.133" md5_port="22" # 定义jar包备份目录和下载目录 jar_bak="/home/jar-bak" jar_get="/home/jar-get" # 定义当前时间 time=$(date +%F-%T) # 定义服务器列表文件地址 server_file="$(pwd)/server_list.txt" # 检测并创建备份、下载目录 [ ! -d ${jar_bak}/${jar_item} ] && mkdir -p ${jar_bak}/${jar_item} [ ! -d ${jar_get}/${jar_item} ] && mkdir -p ${jar_get}/${jar_item} # 该函数用于检测远程app包,备份旧app包,下载新包及大小校验 function wget_app_file () { # 检测包是否存在,不存在则退出该脚本 wget --spider http://${jenkins_site}/job/${jenkins_item}/ws/target/${jar_item}-build.tar > /tmp/wget_jar_url.log 2>&1 cat /tmp/wget_jar_url.log | grep 'Remote file exists.' &> /dev/null if [ $? -ne 0 ];then red_echo "http://${jenkins_site}/job/${jenkins_item}/ws/target/${jar_item}-build.tar Does not exist" exit 1 fi # 备份旧数据 if [ -f ${jar_get}/${jar_item}/${jar_item}.tar ];then rsync -avz ${jar_get}/${jar_item}/${jar_item}.tar ${jar_bak}/${jar_item}/${jar_item}-${time}.tar [ $? -eq 0 ] && green_echo "File backup success" || red_echo "File backup failed" else echo "Source file not exist , not need backup ..." fi # 限速下载所需包,并校验md5完整性 wget -q -O ${jar_get}/${jar_item}/${jar_item}.tar http://${jenkins_site}/job/${jenkins_item}/ws/target/${jar_item}-build.tar jenkins_md5=$(md5sum $jenkins_dir/${jenkins_item}/target/${jar_item}-build.tar | awk '{print $1}') wget_md5=$(md5sum ${jar_get}/${jar_item}/${jar_item}.tar | awk '{print $1}') [ ${jenkins_md5} == ${wget_md5} ] && green_echo "MD5 authentication success" || red_echo "MD5 authentication failed" # 校验文件大小,是否正常 wget_size=$(du -m ${jar_get}/${jar_item}/${jar_item}.tar | awk '{print $1}') if [ ${wget_size} -gt 100 ];then red_echo "File size ${wget_size}M, please verify" exit 1 fi } wget_app_file for info in ${deploy_info[@]};do # 获取部署到的主机名及部署的项目名称及主机IP地址 server_name=$(echo ${info} | awk -F',' '{print $1}' | sed 's/"//g') server_item=$(echo ${info} | awk -F',' '{print $2}' | sed 's/"//g') server_port=$(echo ${info} | awk -F',' '{print $3}' | sed 's/"//g') server_addr=$(cat $server_file | egrep ${server_name} | awk '{print $2}' | sed 's/"//g') # 定义部署的路径,如果不存在,则创建该目录 deploy_dir="${jar_dir}/${server_item}" ${ssh_cmd} root@${server_addr} "[ ! -d ${jar_dir}/${server_item} ]" && ${ssh_cmd} root@${server_addr} "mkdir -p ${jar_dir}/${server_item}" # 检测jar包是否需要更新,如不需要更新则不执行以下动作 wget_md5=$(md5sum ${jar_get}/${jar_item}/${jar_item}.tar | awk '{print $1}') remote_md5=$(${ssh_cmd} root@${server_addr} "md5sum ${deploy_dir}/${jar_item}.tar 2> /dev/null" | awk '{print $1}') if [ ${wget_md5} == ${remote_md5} ] 2> /dev/null ;then green_echo "Version is not changed, no need to deploy" # exit 1 else green_echo "version change,need deploy" fi # 停止当然运行的程序 #jar_info_1="$($ssh_cmd root@$server_addr "ps -ef" | grep chatserver.jar | grep ${server_port} | grep -v grep | awk '{print $(NF-1)}')" #jar_info="$($ssh_cmd root@$server_addr "ps -ef" | grep chatserver.jar | grep ${server_port} | grep -v grep | awk '{print $NF}')" jar_info=$($ssh_cmd root@$server_addr "ps -ef" | grep -e Xms -e Xmx -e MaxNewSize | awk '{print $NF}' | grep ${server_port} | grep -v grep) if [ -z "${jar_info}" ] && [ -z "${jar_info_1}" ] ;then red_echo "This is the first time you deploy, the source file does not exist" else pid=$(${ssh_cmd} root@${server_addr} "ps -ef" | grep "${jar_info}" | grep -v grep | awk '{print $2}') if [ -n "${pid}" ];then green_echo "PID ${pid} exist, stop process" ${ssh_cmd} root@${server_addr} "kill -9 ${pid}" fi fi sleep 5 # 清空程序目录 rm -rf ${deploy_dir}/* # 同步文件,并且解包,修改jar运行端口,启动服务 rsync -avzP --bwlimit=5120 -e "${ssh_cmd}" ${jar_get}/${jar_item}/${jar_item}.tar root@${server_addr}:${deploy_dir}/${jar_item}.tar ${ssh_cmd} root@${server_addr} "tar xf ${deploy_dir}/${jar_item}.tar -C ${deploy_dir}" ${ssh_cmd} root@${server_addr} "sed -i 's/JAR_PORT/${server_port}/g' ${deploy_dir}/${jar_item}/start.sh" ${ssh_cmd} root@${server_addr} "cd ${deploy_dir}/${jar_item};/bin/bash ${deploy_dir}/${jar_item}/start.sh >/dev/null 2>&1" done
相关文章推荐
- Codeforces Round #352 (Div. 2) C. Recycling Bottles
- 终端改变host的类型,还原
- 热加载
- Web前端学习第十二天·fighting_使用CSS布局和定位(二)
- DbUnit入门实战
- 分享一个mac自带小工具
- 逆波兰算法
- Linux---ubuntu重启网络服务
- python_爬取博客内容
- 团队作业(六)
- CityMaker学习教程03 数据的导入
- GoogleLog(GLog)的简单使用
- iOS AFNetworkActivityIndicatorManager 状态栏上边的菊花效果
- 使用事务时应该避免的陷井
- CMTime详解-AVFoundation视频操作必备基础
- dubbo安装
- 公司准备使用KBEngine游戏服务端引擎
- dubbo安装
- 大型网站架构系列:分布式消息队列
- 常用库函数