RuoYi/deploy/deploy.sh

82 lines
2.0 KiB
Bash

#!/bin/bash
#===========================================================================
# RuoYi 自动部署脚本
# 触发方式: Gitee Webhook → webhook.py → deploy.sh
#===========================================================================
set -e
APP_DIR=/opt/ruoyi
JAR_FILE=$APP_DIR/ruoyi-admin/target/ruoyi-admin.jar
LOG_FILE=$APP_DIR/app.log
DEPLOY_LOG=$APP_DIR/deploy.log
PROFILE=druid
PORT=8080
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') [DEPLOY] $1" | tee -a "$DEPLOY_LOG"
}
log "========== 开始部署 =========="
# 1. 拉取最新代码
cd "$APP_DIR"
log "拉取最新代码..."
git pull origin master 2>&1 | tee -a "$DEPLOY_LOG"
# 2. Maven 构建
log "开始 Maven 构建..."
mvn clean package -DskipTests -pl ruoyi-admin -am -q 2>&1 | tee -a "$DEPLOY_LOG"
if [ ! -f "$JAR_FILE" ]; then
log "构建失败: JAR 文件不存在"
exit 1
fi
log "构建成功"
# 3. 停止旧进程
OLD_PID=$(ps aux | grep ruoyi-admin.jar | grep -v grep | awk '{print $2}')
if [ -n "$OLD_PID" ]; then
log "停止旧进程 PID: $OLD_PID"
kill "$OLD_PID"
sleep 3
if ps -p "$OLD_PID" > /dev/null 2>&1; then
kill -9 "$OLD_PID"
log "强制停止 PID: $OLD_PID"
fi
fi
# 4. 启动新进程
log "启动新进程..."
nohup java -Xms128m -Xmx384m -jar "$JAR_FILE" \
--spring.profiles.active="$PROFILE" \
--server.port="$PORT" \
> "$LOG_FILE" 2>&1 &
NEW_PID=$!
log "新进程 PID: $NEW_PID"
# 5. 等待启动
sleep 5
if ps -p "$NEW_PID" > /dev/null 2>&1; then
log "应用启动中,等待就绪..."
for i in 1 2 3 4 5 6; do
if grep -q "Started RuoYiApplication" "$LOG_FILE" 2>/dev/null; then
log "部署成功! 应用已就绪"
break
fi
sleep 5
done
else
log "启动失败! 查看日志: tail -50 $LOG_FILE"
exit 1
fi
# 6. 健康检查
sleep 3
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$PORT 2>/dev/null || echo "000")
log "健康检查 HTTP $HTTP_CODE"
log "========== 部署结束 =========="