当前位置: 首页 > news >正文

springboot项目部署脚本

Springboot部署脚本

该脚本可用于jenkins自动执行,具有以下功能

  1. 适配所有以内嵌tomcat容器springboot项目jar包
  2. 可根据参数选择环境,基于profiles
  3. 可自动识别并关闭已存在进程
  4. 第一个参数是指定jar包所在绝对路径(该路径下必须有且仅有一个.jar文件) 第二个参数是spring.profiles标识

用法 sh deploy.sh /app/yourdir/ dev

#!/bin/bash

# 部署Spring Boot应用的Shell脚本

# 检查参数是否正确
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
    echo "用法: $0 <应用目录> [环境名称]"
    exit 1
fi

APP_DIR=$1

# 检查应用目录是否存在
if [ ! -d "$APP_DIR" ]; then
    echo "错误:应用目录不存在:$APP_DIR"
    exit 1
fi
# 查找目录中的JAR文件
JAR_FILES=("$APP_DIR"/*.jar)
JAR_COUNT=${#JAR_FILES[@]}
echo "找到Jar包 $JAR_FILES"



# 验证JAR文件数量
if [ $JAR_COUNT -eq 0 ]; then
    echo "错误:在目录 $APP_DIR 中未找到任何JAR文件。"
    exit 1
elif [ $JAR_COUNT -gt 1 ]; then
    echo "错误:在目录 $APP_DIR 中找到多个JAR文件,请确保只有一个。"
    echo "找到的JAR文件:"
    printf '%s\n' "${JAR_FILES[@]}"
    exit 1
fi

APP_JAR=${JAR_FILES[0]}
APP_NAME=$(basename $APP_JAR)
echo "准备执行jar包 $APP_NAME "
PROFILE=${2:-""}
# 函数:停止正在运行的应用
stop_application() {
    echo "正在检查应用是否正在运行..."

    # 使用jps查找包含指定jar包名称的Java进程
    jps -l | grep "$APP_NAME" | while read pid app
    do
        echo "正在停止应用 [PID: $pid, APP: $app]"
        kill $pid
        # 等待最多5秒直到进程终止
        for i in {1..5}; do
            if ps -p $pid > /dev/null; then
                sleep 1
            else
                break
            fi
        done
        # 如果仍然存在则强制终止
        if ps -p $pid > /dev/null; then
            echo "强制终止应用 [PID: $pid]"
            kill -9 $pid
        fi
    done
}

# 函数:启动应用
start_application() {

if [ -n "$PROFILE" ]; then

JAVA_OPTS="--spring.profiles.active=$PROFILE"

else

JAVA_OPTS=""

fi

    echo "准备执行jar包 $APP_JAR"
    echo "正在启动应用,当前运行环境为 [$PROFILE]"
    nohup java -jar $APP_JAR $JAVA_OPTS  > /dev/null 2>&1 &
    echo "应用已启动,输出重定向到nohup.out"
}

# 主执行流程
stop_application
# 等待2秒确保进程完全停止
sleep 2
start_application

# 验证启动结果
sleep 10
echo "启动验证:"
jps -l | grep "$APP_NAME" | while read npid napp
do
 echo "应用启动成功 [PID: $npid,APP: $napp]"
done

相关文章:

  • 哪些网站可以做批发网络策划书范文
  • 网站的flash怎么做新闻发布会
  • 宜州网站建设服务智慧营销系统平台
  • 建网站需要什么资料宝鸡seo外包公司
  • 邢台网站制作多少钱网站提交
  • 建设网站可选择的方案有北京百度推广代运营
  • c++11新特性 chrono库
  • yolov8 目标追踪 (源码 +效果图)
  • JS中let和var变量区别
  • LeetCode刷题 -- 29. 两数相除
  • 8、HTTP/1.0和HTTP/1.1的区别【高频】
  • 测试金蝶云的OpenAPI
  • Python面试(八股)
  • 如何管理路由器
  • 做表格用什么软件?VeryReport让数据管理更高效!
  • 如果使用MODBUS通用类进行通信
  • 【无标题】Ubuntu22.04编译视觉十四讲slambook2 ch4时fmt库的报错
  • 【Nodejs】用pm2管理nodejs服务
  • PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下
  • 3 算法1-3 回文质数
  • 使用esp32接入大模型(http请求)
  • AI关于SHAP分析与列线图(算法)解释线性模型矛盾之处的解释
  • 网络流算法: Edmonds-Karp算法
  • PostgreSQL的基本使用
  • PCEP介绍
  • C++ ++++++++++