Spring Boot 应用部署脚本

脚本内容

#!/usr/bin/env bash

# 检查并加载环境配置文件
if [ -f $(pwd $0)/bin/env.sh ]; then
  echo "source $(pwd $0)/bin/env.sh"
  source $(pwd $0)/bin/env.sh
fi
if [ -f $(pwd $0)/../env.sh ]; then
  echo "source $(pwd $0)/../env.sh"
  source $(pwd $0)/../env.sh
fi

# 设置环境变量和端口
ENV_NAME=" -Dspring.profiles.active=${ENV_NAME:='test'} "
SERVER_PORT=${SERVER_PORT:=9300}
EUREKA_MASTERS=${EUREKA_MASTERS%*,}
if [ -n "$EUREKA_MASTERS" ]; then
  DEFAULT_ZONE="-Deureka.client.service-url.defaultZone=${EUREKA_MASTERS}"
fi
echo "eureka default zone value is: ${EUREKA_MASTERS}"

# 设置目录和文件路径
DEPLOY_DIR=$(pwd)
CONF_DIR=$DEPLOY_DIR/config
LIB_DIR=$DEPLOY_DIR/lib
BIN_DIR=$DEPLOY_DIR/bin
JAR_NAME=$(ls -lt $BIN_DIR | grep .jar$ | head -n 1 | awk '{print $9}')
echo "Found Jar file '$JAR_NAME', we are starting it"

# 检查应用程序是否已经在运行
PIDS=$(ps -f | grep java | grep "$CONF_DIR" | awk '{print $2}')
if [ "$1" = "status" ]; then
  if [ -n "$PIDS" ]; then
    echo "The $ARTIFACTID is running...!"
    echo "PID: $PIDS"
    exit 0
  else
    echo "The $ARTIFACTID is stopped"
    exit 0
  fi
fi
if [ -n "$PIDS" ]; then
  echo "ERROR: The $ARTIFACTID already started!"
  echo "PID: $PIDS"
  exit 1
fi

# 检查端口是否被占用
if [ -n "$2" ]; then
  SERVER_PORT_COUNT=$(netstat -tln | grep $2 | wc -l)
  if [ $SERVER_PORT_COUNT -gt 0 ]; then
    echo "ERROR: The $ARTIFACTID port $2 already used!"
    exit 1
  fi
fi

# 设置日志目录
LOGS_DIR=$DEPLOY_DIR/logs
if [ ! -d $LOGS_DIR ]; then
  mkdir $LOGS_DIR
fi
STDOUT_FILE=$LOGS_DIR/stdout.log

# 设置Java启动参数
JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
  JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then
  JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
fi
JAVA_MEM_OPTS=""
BITS=$(java -version 2>&1 | grep -i 64-bit)
if [ -n "$BITS" ]; then
  JAVA_MEM_OPTS=" -server -Xms$XMS_VALUE -Xmx$XMX_VALUE -Xmn$XMN_VALUE -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
  JAVA_MEM_OPTS=" -server -Xms$XMS_VALUE -Xmx$XMX_VALUE -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi

# 配置文件和类路径
CONFIG_FILES=" -Dlogging.path=$LOGS_DIR -Dspring.config.location=$CONF_DIR/ "
LIB_JARS=$(ls $LIB_DIR | grep .jar | grep -v $ARTIFACTID | awk '{print "'$LIB_DIR'/"$0}' | tr "\n" ":")
CLASS_PATH_VALUE=" -classpath $BIN_DIR/$JAR_NAME:$LIB_JARS "
JAVA_SYSTEM_PROPERTY=" -Dspring.devtools.restart.enabled=false "

# 启动应用程序
if [ "$ENVIRONMENT" = "K8S" ]; then
  echo "exec java -Denv=$APOLLO_ENV -Dapollo.configService=$APOLLO_CONFIG_SERVICE $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES -cp $LIB_DIR -jar $BIN_DIR/$JAR_NAME"
  exec java -Denv=$APOLLO_ENV -Dapollo.configService=$APOLLO_CONFIG_SERVICE $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES -cp $LIB_DIR -jar $BIN_DIR/$JAR_NAME
  echo "K8S deploy success ~ "
else
  echo "nohup java -Dspring.main.allow-bean-definition-overriding=true -Dserver.port=$SERVER_PORT $ENV_NAME $DEFAULT_ZONE $JAVA_SYSTEM_PROPERTY $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES $CLASS_PATH_VALUE $MAIN_CLASS >$STDOUT_FILE 2>&1 &"
  nohup java -Dspring.main.allow-bean-definition-overriding=true -Dserver.port=$SERVER_PORT $ENV_NAME $DEFAULT_ZONE $JAVA_SYSTEM_PROPERTY $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES $CLASS_PATH_VALUE $MAIN_CLASS >$STDOUT_FILE 2>&1 &
  PIDS=$(ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}')
  echo "PID: $PIDS"
  echo "STDOUT: $STDOUT_FILE"
  echo "Columbus deploy success ~ "
fi
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值