jar生产部署脚本

发布于:2025-02-25 ⋅ 阅读:(9) ⋅ 点赞:(0)

目录

1. 使用脚本

2. 脚本方法

 2.1 帮助说明

2.2 参数判断

 2.3 设置环境变量 

2.4 日志

2.5  统计运行应用数

2.6  获取pid

2.7 启动

2.8  停止

2.9 备份

2.10 删除过期的备份

2.11 重启

2.12 打印启动状态

3. 完整脚本


1. 使用脚本

sh /tool/scripts/taishi-prod.sh restart  taishi.jar test dev 2 taishi 01 --nacos.address=127.0.0.1:8848 --spring.cloud.nacos.discovery.ip=10.16.110.11

2. 脚本方法

 2.1 帮助说明


# 帮助说明
function usage()
{
  echo "Usage:   sh /tool/scripts/hope-cloud-service-devops.sh [-options] [jarfile] [jardir] [env]"
  echo "Example: sh /tool/scripts/hope-cloud-service-devops.sh restart treasure-auth.jar treasure/auth"
  echo "where options include:"
  echo "     start        启动app"
  echo "     stop         停止app"
  echo "     restart      重启app"
  echo "     status       查看状态"
  echo "See http://127.0.0.1:8090/pages/viewpage.action?pageId=14520287 for more details."
}

2.2 参数判断

  看自己实际情况可以增加减少参数

if [ "$1" == "--help" ];
then
  usage;
  exit 1
fi

# 微服务名
SpringBoot=$2
# 项目目录
ProjectDir=$3
# 项目环境
Env=$4
# 内存配置级别
# 0:256m 1:512m 2:1G 3:2G 4:4G
MemConfLevel=$5
# 配置监控应用名称
AppName=$6
# 配置监控应用Id
AppId=$7
# springboot配置
RegisterConf=$8
#指定服务器IP --spring.cloud.inetutils.preferred-networks=服务器IP
Networks=$9

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m"
    exit 1
fi

if [ "$2" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

if [ "$3" = "" ];
then
    echo -e "\033[0;31m 未输入项目路径 \033[0m"
    exit 1
fi

if [ "$4" = "" ];
then
    echo -e "\033[0;31m 未输入项目环境 \033[0m"
    exit 1
fi
if [ "$5" = "" ];
then
    echo -e "\033[0;31m 未输入内存配置级别 \033[0m"
    exit 1
fi
if [ "$6" = "" ];
then
    echo -e "\033[0;31m 未输入应用名称 \033[0m"
    exit 1
fi
if [ "$7" = "" ];
then
    echo -e "\033[0;31m 未输入应用ID \033[0m"
    exit 1
fi

 2.3 设置环境变量 

# 设置环境变量
function setVariable()
{
    export JAVA_HOME=/u01/software/jdk1.8.0_112
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
}

2.4 日志

#日志
function log
{
  t=`date +"%Y-%m-%d %H:%M:%S"`
  echo "[$t] $1" >> $startup_log
  echo "[$t] $1"
}

2.5  统计运行应用数

 

function getCount()
{
    count=`ps -ef |grep java|grep $SpringBoot|grep -v 'server.port'|grep -v grep|wc -l`
    echo $count
}

2.6  获取pid

function getPid()
{
    pid=`ps -ef |grep java|grep $SpringBoot|grep -v 'server.port'|grep -v grep|awk '{print $2}'`
    echo $pid
}

2.7 启动

# 启动应用
function start()
{
    # 统计运行应用数
    count=`getCount`
    if [ $count != 0 ];then
        log "$SpringBoot is running..."
    else
        log "$SpringBoot is start..."
        cp -rf /u01/builds/$SpringBoot /u01/programs/$ProjectDir/
        cd /u01/programs/$ProjectDir
        if [ "$MemConfLevel" = 0 ];then
            XmsSize=256m
            MetaSize=125m
        elif [ "$MemConfLevel" = 1 ];then
            XmsSize=512m
            MetaSize=256m
        elif [ "$MemConfLevel" = 2 ];then
            XmsSize=1G
            MetaSize=512m
        elif [ "$MemConfLevel" = 3 ];then
            XmsSize=2G
            MetaSize=1G
        elif [ "$MemConfLevel" = 4 ];then
            XmsSize=4G
            MetaSize=2G
        fi
        if [[ "$Env" = "prod" ]] || [[ "$Env" = "prod1" ]] || [[ "$Env" = "uat" ]];then
           IP=`hostname -i`
           InstanceName=''${SpringBootName}'@'${IP}''
           MonitorSetting='-javaagent:/tool/software/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name='${AppName}-$Env' -Dskywalking.agent.instance_name='${InstanceName}''
        else
           MonitorSetting=
        fi
        Base_Setting='-Dfile.encoding=UTF-8'
        Mem_Setting='-Xms'${XmsSize}' -Xmx'${XmsSize}' -Xmn'${MetaSize}'  -XX:OldSize='${MetaSize}' -XX:MetaspaceSize='${MetaSize}' -XX:MaxMetaspaceSize='${MetaSize}''
        GC_Setting='-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:'$gc_log''
        Spring_Setting='--spring.profiles.active='$Env''
        log  "java -jar -server $Mem_Setting $GC_Setting $MonitorSetting $Base_Setting $SpringBoot $Spring_Setting $RegisterConf $Networks >/dev/null 2>$startup_log &"
        nohup java -jar -server $Mem_Setting $GC_Setting $MonitorSetting $Base_Setting $SpringBoot $Spring_Setting $RegisterConf $Networks >/dev/null 2>$startup_log &
    fi
}

2.8  停止

function stop()
{
    log "stop $SpringBoot..."
    count=`getCount`
    if [ $count != 0 ];then
        pid=`getPid`
        log "stop $SpringBoot kill pid ${pid}"
        kill $pid
        sleep 2
        count=`getCount`
        if [ $count != 0 ];then
            log "stop $SpringBoot kill -9 pid ${pid}"
            kill -9 $pid
        fi
    fi
}

2.9 备份

function bak()
{
    mv -f /tool/programs/$ProjectDir/$SpringBoot /u01/bak/${SpringBoot}_`date +%Y%m%d%H%M%S`
}

2.10 删除过期的备份

function del_bak
{
    bak_DIR=/tool/bak
    if [ -d $bak_DIR ]; then
        cd $bak_DIR
        bak_count=`ls -lthr | grep -v 'total' | grep  ${SpringBoot} |  wc -l`
        if (($bak_count > 3));then
            del_count=`expr $bak_count - 3`
            ls -thr | grep -v 'total' | grep  ${SpringBoot}| head -${del_count} | xargs rm -rf
        fi
    fi
}

2.11 重启

function restart()
{
    setVariable
    stop
    del_bak
    bak
    start
    status
}

2.12 打印启动状态

function status()
{
    sleep 2
    count=`getCount`
    if [ $count != 0 ];then
        log "$SpringBoot is success..."
    else
        log "$SpringBoot is not success..."
    fi
}

3. 完整脚本



# 帮助说明
function usage()
{
  echo "Usage:   sh /tool/scripts/hope-cloud-service-devops.sh [-options] [jarfile] [jardir] [env]"
  echo "Example: sh /tool/scripts/hope-cloud-service-devops.sh restart treasure-auth.jar treasure/auth"
  echo "where options include:"
  echo "     start        启动app"
  echo "     stop         停止app"
  echo "     restart      重启app"
  echo "     status       查看状态"
  echo "See http://127.0.01:8090/pages/viewpage.action?pageId=14520287 for more details."
}

if [ "$1" == "--help" ];
then
  usage;
  exit 1
fi

# 微服务名
SpringBoot=$2
# 项目目录
ProjectDir=$3
# 项目环境
Env=$4
# 内存配置级别
# 0:256m 1:512m 2:1G 3:2G 4:4G
MemConfLevel=$5
# 配置监控应用名称
AppName=$6
# 配置监控应用Id
AppId=$7
# springboot配置
RegisterConf=$8
#指定服务器IP --spring.cloud.inetutils.preferred-networks=服务器IP
Networks=$9

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m"
    exit 1
fi

if [ "$2" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

if [ "$3" = "" ];
then
    echo -e "\033[0;31m 未输入项目路径 \033[0m"
    exit 1
fi

if [ "$4" = "" ];
then
    echo -e "\033[0;31m 未输入项目环境 \033[0m"
    exit 1
fi
if [ "$5" = "" ];
then
    echo -e "\033[0;31m 未输入内存配置级别 \033[0m"
    exit 1
fi
if [ "$6" = "" ];
then
    echo -e "\033[0;31m 未输入应用名称 \033[0m"
    exit 1
fi
if [ "$7" = "" ];
then
    echo -e "\033[0;31m 未输入应用ID \033[0m"
    exit 1
fi

mkdir -p /u01/programs/$ProjectDir
mkdir -p /u01/logs/$ProjectDir/startup

SpringBootName=${SpringBoot%%.*}

mkdir -p /u01/logs/$ProjectDir/gc/$SpringBootName

gc_log=/u01/logs/$ProjectDir/gc/$SpringBootName/${SpringBootName}_gc-%t.log

startup_log=/u01/logs/qpaas/startup/$SpringBoot.log

# 设置环境变量
function setVariable()
{
    export JAVA_HOME=/u01/software/jdk1.8.0_112
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
}

#日志
function log
{
  t=`date +"%Y-%m-%d %H:%M:%S"`
  echo "[$t] $1" >> $startup_log
  echo "[$t] $1"
}

# 统计运行应用数
function getCount()
{
    count=`ps -ef |grep java|grep $SpringBoot|grep -v 'server.port'|grep -v grep|wc -l`
    echo $count
}

# 获取pid
function getPid()
{
    pid=`ps -ef |grep java|grep $SpringBoot|grep -v 'server.port'|grep -v grep|awk '{print $2}'`
    echo $pid
}

# 启动应用
function start()
{
    # 统计运行应用数
    count=`getCount`
    if [ $count != 0 ];then
        log "$SpringBoot is running..."
    else
        log "$SpringBoot is start..."
        cp -rf /u01/builds/$SpringBoot /u01/programs/$ProjectDir/
        cd /u01/programs/$ProjectDir
        if [ "$MemConfLevel" = 0 ];then
            XmsSize=256m
            MetaSize=125m
        elif [ "$MemConfLevel" = 1 ];then
            XmsSize=512m
            MetaSize=256m
        elif [ "$MemConfLevel" = 2 ];then
            XmsSize=1G
            MetaSize=512m
        elif [ "$MemConfLevel" = 3 ];then
            XmsSize=2G
            MetaSize=1G
        elif [ "$MemConfLevel" = 4 ];then
            XmsSize=4G
            MetaSize=2G
        fi
        if [[ "$Env" = "prod" ]] || [[ "$Env" = "prod1" ]] || [[ "$Env" = "uat" ]];then
           IP=`hostname -i`
           InstanceName=''${SpringBootName}'@'${IP}''
           MonitorSetting='-javaagent:/tool/software/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name='${AppName}-$Env' -Dskywalking.agent.instance_name='${InstanceName}''
        else
           MonitorSetting=
        fi
        Base_Setting='-Dfile.encoding=UTF-8'
        Mem_Setting='-Xms'${XmsSize}' -Xmx'${XmsSize}' -Xmn'${MetaSize}'  -XX:OldSize='${MetaSize}' -XX:MetaspaceSize='${MetaSize}' -XX:MaxMetaspaceSize='${MetaSize}''
        GC_Setting='-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:'$gc_log''
        Spring_Setting='--spring.profiles.active='$Env''
        log  "java -jar -server $Mem_Setting $GC_Setting $MonitorSetting $Base_Setting $SpringBoot $Spring_Setting $RegisterConf $Networks >/dev/null 2>$startup_log &"
        nohup java -jar -server $Mem_Setting $GC_Setting $MonitorSetting $Base_Setting $SpringBoot $Spring_Setting $RegisterConf $Networks >/dev/null 2>$startup_log &
    fi
}

# 停止应用
function stop()
{
    log "stop $SpringBoot..."
    count=`getCount`
    if [ $count != 0 ];then
        pid=`getPid`
        log "stop $SpringBoot kill pid ${pid}"
        kill $pid
        sleep 2
        count=`getCount`
        if [ $count != 0 ];then
            log "stop $SpringBoot kill -9 pid ${pid}"
            kill -9 $pid
        fi
    fi
}

# 备份应用
function bak()
{
    mv -f /tool/programs/$ProjectDir/$SpringBoot /u01/bak/${SpringBoot}_`date +%Y%m%d%H%M%S`
}

# 删除过期的备份程序只保留最新3次的
function del_bak
{
    bak_DIR=/tool/bak
    if [ -d $bak_DIR ]; then
        cd $bak_DIR
        bak_count=`ls -lthr | grep -v 'total' | grep  ${SpringBoot} |  wc -l`
        if (($bak_count > 3));then
            del_count=`expr $bak_count - 3`
            ls -thr | grep -v 'total' | grep  ${SpringBoot}| head -${del_count} | xargs rm -rf
        fi
    fi
}


# 重启应用
function restart()
{
    setVariable
    stop
    del_bak
    bak
    start
    status
}

# 打印启动状态
function status()
{
    sleep 2
    count=`getCount`
    if [ $count != 0 ];then
        log "$SpringBoot is success..."
    else
        log "$SpringBoot is not success..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    --help)
    usage;;
    *)
    echo -e "请使用--help察看可用选项" ;;
esac