#!/bin/bash # 设置变量 REPO_URL="http://47.121.181.112:3000/wonder/stardew-valley.git" PROJECT_DIR="/opt/stardew-valley" MAVEN_CMD="mvn clean package -Dmaven.test.skip=true" # 跳过测试(编译 & 执行都跳过) APP_NAME="stardew-valley" # PM2 中的应用名称 JAR_FILE="" DEPLOY_DIR="/opt/stardew-valley/target" # 你可以指定部署目录,也可以直接使用 target 目录 # 检查依赖是否安装 if ! command -v git &> /dev/null; then echo "错误:Git 未安装,请先安装 Git。" exit 1 fi if ! command -v mvn &> /dev/null; then echo "错误:Maven 未安装,请先安装 Maven。" exit 1 fi if ! command -v pm2 &> /dev/null; then echo "错误:PM2 未安装,请先安装 PM2。" exit 1 fi # 克隆或拉取代码 echo "正在克隆或拉取仓库 $REPO_URL 到 $PROJECT_DIR ..." if [ -d "$PROJECT_DIR" ]; then echo "目录 $PROJECT_DIR 已存在,正在拉取最新代码..." cd "$PROJECT_DIR" || { echo "无法进入目录 $PROJECT_DIR"; exit 1; } git pull origin main else git clone "$REPO_URL" "$PROJECT_DIR" fi # 进入项目目录 cd "$PROJECT_DIR" || { echo "无法进入目录 $PROJECT_DIR"; exit 1; } # 执行 Maven 构建(跳过测试) echo "正在执行 Maven 构建(跳过测试)..." $MAVEN_CMD # 检查构建是否成功 if [ $? -ne 0 ]; then echo "Maven 构建失败,退出脚本。" exit 1 fi # 查找生成的 JAR 文件 JAR_FILE=$(find "$PROJECT_DIR/target" -type f -name "*.jar" | head -n 1) if [ -z "$JAR_FILE" ]; then echo "未找到 JAR 文件,构建可能失败或项目类型不识别。" exit 1 fi echo "找到 JAR 文件: $JAR_FILE" # 部署文件(可选,也可直接在 target 目录下启动) # 可以选择是否拷贝到其他目录(比如 /opt/stardew-valley/app/) # 如果你不需要部署到其他目录,可以直接使用 target 目录 echo "部署 JAR 文件到 $DEPLOY_DIR ..." # 如果你不需要复制,可以去掉这一行 # cp "$JAR_FILE" "$DEPLOY_DIR/" # 删除旧的 PM2 进程 echo "删除 PM2 中的旧进程 $APP_NAME..." pm2 delete "$APP_NAME" > /dev/null 2>&1 # 启动 Java 应用 echo "正在启动 Java 应用..." pm2 start "java -jar $JAR_FILE" --no-daemon --name "$APP_NAME" # 提示信息 echo "部署和启动完成!"