全文目录,一步到位
- 1.前言简介
-
- [1.1 专栏传送门](#1.1 专栏传送门)
- [2. 启动的sh脚本大全](#2. 启动的sh脚本大全)
-
- [2.1 停止服务`stop.sh`脚本 (可独立运行)](#2.1 停止服务
stop.sh脚本 (可独立运行)) - [2.2 重启服务`restart.sh`(双版本)](#2.2 重启服务
restart.sh(双版本)) -
- [=> 2.2.1 不可单独运行版本 需要依赖于stop.sh](#=> 2.2.1 不可单独运行版本 需要依赖于stop.sh)
- [=> 2.2.2 可单独运行版本](#=> 2.2.2 可单独运行版本)
- [2.3 打版发布脚本`issue.sh`(`不可`单独执行)](#2.3 打版发布脚本
issue.sh(不可单独执行)) - [2.4 前置准备工作](#2.4 前置准备工作)
- [2.1 停止服务`stop.sh`脚本 (可独立运行)](#2.1 停止服务
- [3. 文章的总结与预告](#3. 文章的总结与预告)
-
- [3.1 本文总结](#3.1 本文总结)
1.前言简介
最近弄内网服务器, 就算部署jenkins也没啥用, 登录堡垒机, 并且项目是个单体, 那就弄个能自动拉取 打版发布的功能就行了
1.1 专栏传送门
2. 启动的sh脚本大全

补充一下 没有权限 就 在sh脚本路径下执行指令 , 或者输入名字替换*
bash
chmod +x *.sh
*** 注意, 下面的脚本用的时候 更换一下目录 ***
2.1 停止服务stop.sh脚本 (可独立运行)
# 脚本名称:stop.sh
#
# @author: pzy
# @data: 2025/12/04
#
# 功能:单独停止ruoyi-admin服务(关闭旧进程)
#
# 可独立执行:./stop.sh
bash
#!/bin/bash
#
# 脚本名称:stop.sh
#
# @author: pzy
# @data: 2025/12/04
#
# 功能:单独停止ruoyi-admin服务(关闭旧进程)
#
# 可独立执行:./stop.sh
# ======================== 配置项========================
WORK_DIR="/usr/local/src/docker/jar/zhengwu/e-commerce" # 项目根目录
JAR_DIR="${WORK_DIR}/ruoyi-admin/target" # JAR包所在目录
JAR_FILE="${JAR_DIR}/ruoyi-admin.jar" # 目标JAR包路径
# =============================================================================
# 错误提示函数(红色字体)
error_exit() {
echo -e "\033[31m[ERROR] $1\033[0m" >&2
exit 1
}
# 成功提示函数(绿色字体)
success_echo() {
echo -e "\033[32m[SUCCESS] $1\033[0m"
}
# 信息提示函数(蓝色字体)
info_echo() {
echo -e "\033[34m[INFO] $1\033[0m"
}
# ======================== check ========================
# 检查JAR文件路径是否存在(即使JAR没启动,也允许执行停止操作)
if [ ! -d "${JAR_DIR}" ]; then
error_exit "JAR目录 ${JAR_DIR} 不存在,请检查路径是否正确!"
fi
# ======================== 查找并关闭旧进程 ========================
info_echo "查找ruoyi-admin.jar的运行进程..."
OLD_PID=$(ps aux | grep "${JAR_FILE}" | grep -v grep | awk '{print $2}')
if [ -z "${OLD_PID}" ]; then
success_echo "未找到ruoyi-admin.jar的运行进程,无需停止"
exit 0
fi
# 存在进程,执行关闭逻辑
info_echo "找到ruoyi-admin.jar进程PID:${OLD_PID},开始停止..."
# 第一步:尝试正常关闭(优雅退出)
if kill "${OLD_PID}"; then
# 等待3秒,检查进程是否已关闭
sleep 3
if ps -p "${OLD_PID}" > /dev/null 2>&1; then
info_echo "进程${OLD_PID}未正常退出,执行强制杀死(kill -9)..."
kill -9 "${OLD_PID}" || error_exit "强制杀死进程${OLD_PID}失败!"
success_echo "进程${OLD_PID}已强制关闭"
else
success_echo "进程${OLD_PID}已正常关闭"
fi
else
error_exit "尝试关闭进程${OLD_PID}失败!请手动检查进程状态"
fi
success_echo "ruoyi-admin服务停止完成!"
exit 0
2.2 重启服务restart.sh(双版本)
=> 2.2.1 不可单独运行版本 需要依赖于stop.sh
java
#!/bin/bash
#
# 脚本名称:restart.sh
#
# @author: pzy
# @data: 2025/12/04
#
# 功能:单独重启ruoyi-admin服务(关闭旧进程+启动新进程)
#
# 可独立执行:./restart.sh
#
# 依赖文件: ./stop.sh
# ======================== 配置项 ========================
WORK_DIR="/usr/local/src/docker/jar/zhengwu/e-commerce" # 项目根目录
JAR_DIR="${WORK_DIR}/ruoyi-admin/target" # JAR包所在目录
JAR_FILE="${JAR_DIR}/ruoyi-admin.jar" # 目标JAR包路径
SH_WORK_DIR="/usr/local/src/docker/jar/zhengwu" # 脚本存放位置
STOP_SCRIPT="${SH_WORK_DIR}/stop.sh" # 停止脚本路径
LOG_FILE="${SH_WORK_DIR}/nohup.log" # 应用日志文件路径(存到脚本路径下)
# =============================================================================
# 错误提示函数(红色字体)
error_exit() {
echo -e "\033[31m[ERROR] $1\033[0m" >&2
exit 1
}
# 成功提示函数(绿色字体)
success_echo() {
echo -e "\033[32m[SUCCESS] $1\033[0m"
}
# 信息提示函数(蓝色字体)
info_echo() {
echo -e "\033[34m[INFO] $1\033[0m"
}
# ======================== check ========================
# 检查JAR目录是否存在
if [ ! -d "${JAR_DIR}" ]; then
error_exit "JAR目录 ${JAR_DIR} 不存在,请检查打包是否成功!"
fi
# 检查JAR文件是否存在
if [ ! -f "${JAR_FILE}" ]; then
error_exit "JAR文件 ${JAR_FILE} 不存在,请先执行mvn打包!, 执行issue_zhengwu.sh即可"
fi
# ======================== 查找并关闭旧进程 ========================
info_echo "开始停止ruoyi-admin旧服务(调用 ${STOP_SCRIPT})..."
if ! "${STOP_SCRIPT}"; then
error_exit "停止旧服务失败!请手动执行 ${STOP_SCRIPT} 检查问题"
fi
# ======================== 启动新进程 ========================
info_echo "启动ruoyi-admin.jar,日志将输出到 ${LOG_FILE}"
# 清空旧日志 (留 注释即可)
> "${LOG_FILE}"
# 后台启动JAR包,并重定向日志(stdout/stderr都写入日志)
nohup java -jar "${JAR_FILE}" > "${LOG_FILE}" 2>&1 &
NEW_PID=$! # 获取新进程PID
# 验证进程是否启动成功
sleep 2 # 等待2秒让进程稳定
if ps -p "${NEW_PID}" > /dev/null 2>&1; then
success_echo "ruoyi-admin服务重启成功!"
success_echo "新进程PID:${NEW_PID}"
success_echo "应用日志路径:${LOG_FILE}"
else
error_exit "ruoyi-admin服务启动失败!请查看日志 ${LOG_FILE}"
fi
exit 0
=> 2.2.2 可单独运行版本
找到
查找并关闭旧进程---> 替换成这个即可
到
启动新进程之前
bash
info_echo "查找ruoyi-admin.jar的旧进程..."
OLD_PID=$(ps aux | grep "${JAR_FILE}" | grep -v grep | awk '{print $2}')
if [ -n "${OLD_PID}" ]; then
info_echo "找到旧进程PID:${OLD_PID},正在关闭..."
# 尝试正常关闭进程
if kill "${OLD_PID}"; then
# 等待3秒,检查进程是否关闭
sleep 3
if ps -p "${OLD_PID}" > /dev/null 2>&1; then
info_echo "旧进程${OLD_PID}未正常关闭,执行强制杀死..."
kill -9 "${OLD_PID}" || error_exit "强制杀死旧进程${OLD_PID}失败!"
fi
success_echo "旧进程${OLD_PID}已成功关闭"
else
error_exit "关闭旧进程${OLD_PID}失败!"
fi
else
info_echo "未找到ruoyi-admin.jar的旧进程,无需关闭"
fi
2.3 打版发布脚本issue.sh(不可单独执行)
需要依赖上面两个脚本
功能:
自动化拉取代码
maven编译打包
成功后调用restart.sh重启服务
注意事项:需要首先
git clone拉取代码(并且配置好账号密码/密钥等)
依赖文件:
./stop.sh
./restart.sh
bash
#!/bin/bash
#
# @author: pzy
# @data: 2025/12/04
#
# 功能:
# 1. 自动化拉取代码
# 2. 编译打包
# 3. 成功后调用restart.sh重启服务
#
# 注意事项:
# 需要首先git clone拉取代码(并且配置好账号密码/密钥等)
#
# 依赖文件:
# ./stop.sh
# ./restart.sh
# ======================== 配置项 ========================
WORK_DIR="/usr/local/src/docker/jar/zhengwu/e-commerce" # 项目根目录
SH_WORK_DIR="/usr/local/src/docker/jar/zhengwu" # 脚本存放位置
MAVEN_PATH="/usr/local/src/apache-maven-3.6.3/bin/mvn" # mvn执行路径
RESTART_SCRIPT="${SH_WORK_DIR}/restart.sh" # 重启脚本路径
# =============================================================================
# 错误提示函数(红色字体)
error_exit() {
echo -e "\033[31m[ERROR] $1\033[0m" >&2
exit 1
}
# 成功提示函数(绿色字体)
success_echo() {
echo -e "\033[32m[SUCCESS] $1\033[0m"
}
# 信息提示函数(蓝色字体)
info_echo() {
echo -e "\033[34m[INFO] $1\033[0m"
}
# ======================== 步骤1:进入项目目录 ========================
info_echo "开始执行步骤1:进入项目目录 ${WORK_DIR}"
if [ ! -d "${WORK_DIR}" ]; then
error_exit "项目目录 ${WORK_DIR} 不存在,请检查路径是否正确!"
fi
cd "${WORK_DIR}" || error_exit "进入目录 ${WORK_DIR} 失败,请检查目录权限!"
success_echo "步骤1执行完成:已进入目录 ${WORK_DIR}"
# ======================== 步骤2:拉取Git代码 ========================
info_echo "开始执行步骤2:拉取Git最新代码"
if ! git pull; then
error_exit "步骤2执行失败:git pull 拉取代码失败!"
fi
success_echo "步骤2执行完成:Git代码拉取成功"
# ======================== 步骤3:Maven编译打包 ========================
info_echo "开始执行步骤3:Maven clean install 编译打包"
if ! "${MAVEN_PATH}" clean install; then
error_exit "步骤3执行失败:mvn clean install 编译打包失败!"
fi
success_echo "步骤3执行完成:Maven编译打包成功"
# ======================== 步骤4:调用独立的重启脚本 ========================
info_echo "开始执行步骤4:调用重启脚本 ${RESTART_SCRIPT}"
# 检查重启脚本是否存在且可执行
if [ ! -f "${RESTART_SCRIPT}" ]; then
error_exit "重启脚本 ${RESTART_SCRIPT} 不存在!"
fi
if [ ! -x "${RESTART_SCRIPT}" ]; then
info_echo "重启脚本缺少执行权限,自动添加..."
chmod +x "${RESTART_SCRIPT}" || error_exit "添加重启脚本执行权限失败!"
fi
# 执行重启脚本,并检查执行结果
if "${RESTART_SCRIPT}"; then
success_echo "所有步骤执行完成!代码拉取、打包、服务重启均成功"
else
error_exit "步骤4执行失败:调用重启脚本 ${RESTART_SCRIPT} 失败!"
fi
exit 0
2.4 前置准备工作
git 得有 先git clone执行一下 把项目拉去下来(记得把账号密码都放入到链接中,或者密钥等)
装一个maven maven配置一下settings.xml , 设置一下本地仓库地址
3. 文章的总结与预告
3.1 本文总结
实现简易的代码拉取-> 打包 -> 发布的 简单脚本, 小功能省略装jenkins
@author: pingzhuyan
@description: ok
@year: 2024