当前位置: 首页 > 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 ]; thenecho "用法: $0 <应用目录> [环境名称]"exit 1
fiAPP_DIR=$1# 检查应用目录是否存在
if [ ! -d "$APP_DIR" ]; thenecho "错误:应用目录不存在:$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 ]; thenecho "错误:在目录 $APP_DIR 中未找到任何JAR文件。"exit 1
elif [ $JAR_COUNT -gt 1 ]; thenecho "错误:在目录 $APP_DIR 中找到多个JAR文件,请确保只有一个。"echo "找到的JAR文件:"printf '%s\n' "${JAR_FILES[@]}"exit 1
fiAPP_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 appdoecho "正在停止应用 [PID: $pid, APP: $app]"kill $pid# 等待最多5秒直到进程终止for i in {1..5}; doif ps -p $pid > /dev/null; thensleep 1elsebreakfidone# 如果仍然存在则强制终止if ps -p $pid > /dev/null; thenecho "强制终止应用 [PID: $pid]"kill -9 $pidfidone
}# 函数:启动应用
start_application() {if [ -n "$PROFILE" ]; thenJAVA_OPTS="--spring.profiles.active=$PROFILE"elseJAVA_OPTS=""fiecho "准备执行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
doecho "应用启动成功 [PID: $npid,APP: $napp]"
done
http://www.lryc.cn/news/544312.html

相关文章:

  • 黑马Java面试教程_P5_微服务
  • 使用Fuse-DFS挂载文件存储 HDFS-后端存储ceph
  • 生成式AI项目的生命周期
  • SOC-ATF 安全启动BL1流程分析(1)
  • 游戏引擎学习第127天
  • Grafana使用日志7--开启Sigv4
  • UWB人员定位:精准、高效、安全的智能管理解决方案
  • 二、QT和驱动模块实现智能家居----2、编译支持QT的系统
  • Windows上使用go-ios实现iOS17自动化
  • 越南SD-WAN跨境组网专线助力制造业访问国内 OA、ERP系统难题
  • 【广度优先搜索】图像渲染 岛屿数量
  • Rust学习总结之-枚举
  • Linux下用route命令修改默认网关,不用重启网络
  • Datawhale 数学建模导论二 笔记5 多模数据与智能模型
  • 【练习】【贪心】力扣1005. K 次取反后最大化的数组和
  • python学习七
  • 安全运营的“黄金4小时“:如何突破告警疲劳困局
  • 本地部署Embedding模型API服务的实战教程
  • 数据结构:二叉树的链式结构及相关算法详解
  • 10.【线性代数】—— 四个基本子空间
  • 计算机黑皮书191本分享pdf
  • MySQL Connector/J下载
  • AIGC生图产品PM必须知道的Lora训练知识!
  • 【Swift 算法实战】城市天际线问题解法
  • 易错点abc
  • C++ 正则表达式分组捕获入门指南
  • AI人工智能机器学习之降维和数据压缩
  • 17 款电脑压缩工具详解及下载指南(2025 年最新版)
  • DeepSeek开源周Day5压轴登场:3FS与Smallpond,能否终结AI数据瓶颈之争?
  • ROS2软件调用架构和机制解析:Publisher创建