#!/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 "========== 部署结束 =========="