jar 程序发布脚本

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值