refactor(deploy): 优化全量部署脚本的构建流程与资源管理
Some checks failed
Build and Deploy / deploy (push) Has been cancelled
Some checks failed
Build and Deploy / deploy (push) Has been cancelled
- 重命名脚本标题为“生产增强版”,优化配置区块划分 - 增强环境配置:自动寻找 Maven 路径,设置内存限制防止 OOM - 优化后端构建:使用多线程编译(-T 1C)加速,改进进程清理逻辑 - 优化前端部署:简化日志输出,明确部署步骤描述 - 改进日志记录:添加部署完成标记,增强可读性 - 统一工具函数和路径配置,提升脚本可维护性
This commit is contained in:
@@ -1,102 +1,96 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 芋道源码全量部署脚本 - 生产环境专用版
|
||||
# 芋道 (Yudao) 全量部署脚本 - 生产增强版
|
||||
# ============================================
|
||||
set -e
|
||||
|
||||
# ==================== 配置区 ====================
|
||||
PROJECT_DIR="/www/wwwroot/sionrui"
|
||||
BACKEND_DIR="/www/wwwroot/yudao-server"
|
||||
FRONTEND_DIR="/www/wwwroot/muyetools.cn"
|
||||
# ==================== 1. 核心路径配置 ====================
|
||||
PROJECT_DIR="/www/wwwroot/sionrui" # 源码目录
|
||||
BACKEND_DIR="/www/wwwroot/yudao-server" # 运行目录
|
||||
FRONTEND_DIR="/www/wwwroot/muyetools.cn" # 前端静态目录
|
||||
|
||||
BACKEND_JAR_NAME="yudao-server.jar"
|
||||
BACKEND_PORT=9900
|
||||
BUILD_LOG="/tmp/gitea_build_$(date +%Y%m%d).log"
|
||||
|
||||
# 强制指定 JDK 17 (根据你的截图路径)
|
||||
# ==================== 2. 环境强制指定 ====================
|
||||
# 强制指定 JDK 17 (根据你的截图)
|
||||
export JAVA_HOME="/www/server/java/jdk-17.0.8"
|
||||
export PATH=$JAVA_HOME/bin:$PATH
|
||||
|
||||
# Maven 仓库与内存优化
|
||||
# 自动寻找 Maven 路径
|
||||
MVN_EXEC=$(which mvn || find /www/server -name "mvn" | head -n 1 || echo "mvn")
|
||||
|
||||
# 限制内存防止 OOM,设置 Maven 多线程加速编译
|
||||
export MAVEN_OPTS="-Xms512m -Xmx1024m"
|
||||
export NODE_OPTIONS="--max-old-space-size=2048"
|
||||
|
||||
# 指定本地仓库(解决 www 用户权限问题)
|
||||
MAVEN_REPO="$PROJECT_DIR/.m2_repo"
|
||||
mkdir -p $MAVEN_REPO && chmod -R 777 $MAVEN_REPO
|
||||
export MAVEN_OPTS="-Xms256m -Xmx512m"
|
||||
|
||||
# ==================== 工具函数 ====================
|
||||
# ==================== 3. 工具函数 ====================
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $BUILD_LOG
|
||||
}
|
||||
|
||||
# ==================== 核心逻辑 ====================
|
||||
|
||||
# ==================== 4. 后端部署逻辑 ====================
|
||||
deploy_backend() {
|
||||
log "========== [后端] 开始部署 =========="
|
||||
log "🚀 [后端] 开始部署流程..."
|
||||
|
||||
# 1. 代码同步
|
||||
cd $PROJECT_DIR
|
||||
log "1.1 拉取最新代码..."
|
||||
log "1.1 同步最新代码..."
|
||||
git fetch origin
|
||||
git reset --hard origin/main
|
||||
|
||||
# 2. 编译打包
|
||||
log "1.2 开始 Maven 编译 (详情见 $BUILD_LOG)..."
|
||||
# 显式使用项目内的 yudao-server 模块进行构建
|
||||
mvn clean package -DskipTests -pl yudao-server -am -Dmaven.repo.local=$MAVEN_REPO >> $BUILD_LOG 2>&1
|
||||
log "1.2 开始多线程构建 (4核加速)..."
|
||||
# -T 1C 表示每个 CPU 核心一个线程,显著缩短 99% CPU 占用的时长
|
||||
$MVN_EXEC clean package -DskipTests -pl yudao-server -am -T 1C -Dmaven.repo.local=$MAVEN_REPO >> $BUILD_LOG 2>&1
|
||||
|
||||
# 3. 进程清理 (解决文件占用问题)
|
||||
log "1.3 正在清理旧进程..."
|
||||
# 强制杀掉占用 9900 端口或运行该 JAR 的进程
|
||||
PID=$(ps -ef | grep "$BACKEND_JAR_NAME" | grep -v "grep" | awk '{print $2}')
|
||||
if [ -n "$PID" ]; then
|
||||
kill -9 $PID || true
|
||||
sleep 2
|
||||
fi
|
||||
log "1.3 清理旧进程与文件锁..."
|
||||
# 查找并强杀旧 JAR 进程
|
||||
OLD_PID=$(ps -ef | grep "$BACKEND_JAR_NAME" | grep -v "grep" | awk '{print $2}')
|
||||
[ -z "$OLD_PID" ] || kill -9 $OLD_PID
|
||||
sleep 2
|
||||
|
||||
# 4. 安全复制 (先删再拷)
|
||||
log "1.4 复制 JAR 包到运行目录..."
|
||||
mkdir -p $BACKEND_DIR/logs
|
||||
|
||||
# 检查源文件是否存在
|
||||
log "1.4 复制 JAR 包 (安全覆盖)..."
|
||||
SOURCE_JAR="$PROJECT_DIR/yudao-server/target/$BACKEND_JAR_NAME"
|
||||
if [ ! -f "$SOURCE_JAR" ]; then
|
||||
log "❌ 错误:未找到生成的 JAR 包:$SOURCE_JAR"
|
||||
log "❌ 编译失败:未在 $SOURCE_JAR 找到文件!请检查 $BUILD_LOG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p $BACKEND_DIR/logs
|
||||
rm -f "$BACKEND_DIR/$BACKEND_JAR_NAME"
|
||||
cp -f "$SOURCE_JAR" "$BACKEND_DIR/"
|
||||
log "JAR 包复制完成: $(ls -lh $BACKEND_DIR/$BACKEND_JAR_NAME | awk '{print $5}')"
|
||||
|
||||
# 5. 启动服务 (完全脱离终端)
|
||||
log "1.5 启动后端服务..."
|
||||
cd $BACKEND_DIR
|
||||
# 关键:通过重定向所有输出到 /dev/null 防止脚本挂起
|
||||
nohup java -Xms512m -Xmx512m -jar $BACKEND_JAR_NAME --spring.profiles.active=prod > ./logs/console.log 2>&1 &
|
||||
|
||||
log "✅ 后端启动指令已发送"
|
||||
log "1.5 后台启动服务..."
|
||||
cd $BACKEND_DIR
|
||||
# 完全脱离终端重定向,防止脚本挂起
|
||||
nohup java -Xms512m -Xmx1024m -jar $BACKEND_JAR_NAME --spring.profiles.active=prod > ./logs/console.log 2>&1 &
|
||||
|
||||
log "✅ 后端启动成功 (PID: $!)"
|
||||
}
|
||||
|
||||
# ==================== 5. 前端部署逻辑 ====================
|
||||
deploy_frontend() {
|
||||
log "========== [前端] 开始部署 =========="
|
||||
log "🚀 [前端] 开始部署流程..."
|
||||
cd $PROJECT_DIR/frontend
|
||||
|
||||
log "2.1 安装依赖 (pnpm)..."
|
||||
pnpm install >> $BUILD_LOG 2>&1
|
||||
|
||||
log "2.2 前端构建 (Build)..."
|
||||
log "2.2 构建生产文件..."
|
||||
pnpm build >> $BUILD_LOG 2>&1
|
||||
|
||||
log "2.3 部署静态文件..."
|
||||
# 确保目标目录干净
|
||||
log "2.3 刷新 Web 目录..."
|
||||
rm -rf $FRONTEND_DIR/*
|
||||
cp -r $PROJECT_DIR/frontend/app/web-gold/dist/* $FRONTEND_DIR/
|
||||
|
||||
log "✅ 前端部署完成"
|
||||
}
|
||||
|
||||
# ==================== 主流程 ====================
|
||||
|
||||
# 运行前清理可能的构建残留
|
||||
# ==================== 6. 执行主流程 ====================
|
||||
# 清理可能残留的构建进程
|
||||
pkill -f "maven" || true
|
||||
|
||||
case "$1" in
|
||||
@@ -106,4 +100,6 @@ case "$1" in
|
||||
deploy_backend
|
||||
deploy_frontend
|
||||
;;
|
||||
esac
|
||||
esac
|
||||
|
||||
log "🏁 [$(date '+%H:%M:%S')] 部署流水线全部执行完毕!"
|
||||
Reference in New Issue
Block a user