您的位置:首页 > 其它

jar 程序发布脚本

2016-05-27 18:44 260 查看
Fish-ChatServer-CI.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: