Some checks failed
Build and Deploy / deploy (push) Has been cancelled
在部署脚本中添加 JAVA_HOME 环境变量配置,明确指定使用 JDK 17.0.8,并添加版本验证命令输出到调试日志,确保构建环境的一致性。
108 lines
3.2 KiB
Bash
108 lines
3.2 KiB
Bash
#!/bin/bash
|
||
# ============================================
|
||
# 增强版全量部署脚本 - 带有深度日志追踪与权限优化
|
||
# ============================================
|
||
set -e
|
||
|
||
|
||
|
||
# ==================== 配置区 ====================
|
||
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"
|
||
|
||
# 关键:强制指定 Maven 仓库到 www 用户有权访问的地方
|
||
MAVEN_REPO="$PROJECT_DIR/.m2_repo"
|
||
mkdir -p $MAVEN_REPO && chmod -R 777 $MAVEN_REPO
|
||
|
||
# 限制 Maven 内存,防止隐性 OOM
|
||
export MAVEN_OPTS="-Xms256m -Xmx512m"
|
||
export NODE_OPTIONS="--max-old-space-size=1024"
|
||
export JAVA_HOME="/www/server/java/jdk-17.0.8"
|
||
export PATH=$JAVA_HOME/bin:$PATH
|
||
|
||
# 验证一下,确保输出的是 17.0.8
|
||
java -version >> /tmp/mvn_debug.log 2>&1
|
||
|
||
# ==================== 工具函数 ====================
|
||
log() {
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $BUILD_LOG
|
||
}
|
||
|
||
# 清理残留进程
|
||
cleanup_old_processes() {
|
||
log "检查并清理旧的构建/运行进程..."
|
||
# 杀掉之前的构建进程(如果有)
|
||
pkill -f "maven" || true
|
||
pkill -f "pnpm" || true
|
||
}
|
||
|
||
# ==================== 核心逻辑 ====================
|
||
|
||
deploy_backend() {
|
||
log "========== [后端] 开始部署 =========="
|
||
|
||
cd $PROJECT_DIR
|
||
log "1. 拉取代码..."
|
||
git fetch origin
|
||
git reset --hard origin/main
|
||
|
||
log "2. 开始编译 (日志记录在: $BUILD_LOG)..."
|
||
# 移除 -q,增加 -U (强制更新),显式指定仓库
|
||
# 使用 2>&1 将错误也抓取到日志中
|
||
mvn clean package -DskipTests -pl yudao-server -am -Dmaven.repo.local=$MAVEN_REPO >> $BUILD_LOG 2>&1
|
||
|
||
if [ $? -ne 0 ]; then
|
||
log "❌ 后端编译失败!请查看 $BUILD_LOG"
|
||
exit 1
|
||
fi
|
||
|
||
log "3. 准备启动 JAR..."
|
||
mkdir -p $BACKEND_DIR/backup
|
||
[ -f "$BACKEND_DIR/$BACKEND_JAR_NAME" ] && cp $BACKEND_DIR/$BACKEND_JAR_NAME $BACKEND_DIR/backup/server-$(date +%H%M).jar
|
||
cp $PROJECT_DIR/yudao-server/target/$BACKEND_JAR_NAME $BACKEND_DIR/
|
||
|
||
log "4. 重启服务..."
|
||
PID=$(ps -ef | grep $BACKEND_DIR/$BACKEND_JAR_NAME | grep -v "grep" | awk '{print $2}')
|
||
[ -z "$PID" ] || kill -9 $PID
|
||
|
||
cd $BACKEND_DIR
|
||
nohup java -Xms512m -Xmx512m -jar $BACKEND_JAR_NAME --spring.profiles.active=prod > $BACKEND_DIR/logs/console.log 2>&1 &
|
||
|
||
log "✅ 后端部署指令已发出,请稍后检查端口 $BACKEND_PORT"
|
||
}
|
||
|
||
deploy_frontend() {
|
||
log "========== [前端] 开始部署 =========="
|
||
cd $PROJECT_DIR/frontend
|
||
|
||
log "1. 安装依赖 (pnpm)..."
|
||
pnpm install >> $BUILD_LOG 2>&1
|
||
|
||
log "2. 前端构建..."
|
||
pnpm build >> $BUILD_LOG 2>&1
|
||
|
||
log "3. 发布文件..."
|
||
rm -rf $FRONTEND_DIR/*
|
||
cp -r $PROJECT_DIR/frontend/app/web-gold/dist/* $FRONTEND_DIR/
|
||
|
||
log "✅ 前端部署完成"
|
||
}
|
||
|
||
# ==================== 主入口 ====================
|
||
cleanup_old_processes
|
||
|
||
case "$1" in
|
||
backend-only) deploy_backend ;;
|
||
frontend-only) deploy_frontend ;;
|
||
*)
|
||
deploy_backend
|
||
deploy_frontend
|
||
;;
|
||
esac
|
||
|
||
log "🚀 所有流程执行完毕!" |