Przeglądaj źródła

fix: 对齐Jenkins构建流程,修复deploy.sh遗漏的关键步骤

- 新增mvn install阶段,安装公共模块到本地仓库
- 构建admin-web前清理static目录,避免旧产物残留
- NPM/MVN改用绝对路径(/usr/local/bin/npm, /usr/local/apache-maven-3.9.6/bin/mvn)
- 将npm全局bin加入PATH,解决uni命令找不到的问题
- 前端构建前增加npm install步骤
- maven打包改为从模块目录执行(与Jenkins一致)

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 1 miesiąc temu
rodzic
commit
30462e464d
1 zmienionych plików z 40 dodań i 15 usunięć
  1. 40 15
      deploy.sh

+ 40 - 15
deploy.sh

@@ -15,6 +15,14 @@ LOG_DIR="/data/logs"
 HISTORY_FILE="/data/history"
 HISTORY_FILE="/data/history"
 CERT_DIR="/data/pem"
 CERT_DIR="/data/pem"
 
 
+# 构建工具路径(对齐 Jenkins 环境)
+NPM="${NPM:-/usr/local/bin/npm}"
+MVN="${MVN:-/usr/local/apache-maven-3.9.6/bin/mvn}"
+
+# 将 npm 全局 bin 加入 PATH(确保 uni 等全局包可被找到)
+NPM_PREFIX=$($NPM config get prefix 2>/dev/null || echo "/usr/local")
+export PATH="$NPM_PREFIX/bin:$PATH"
+
 RED='\033[0;31m'
 RED='\033[0;31m'
 GREEN='\033[0;32m'
 GREEN='\033[0;32m'
 YELLOW='\033[1;33m'
 YELLOW='\033[1;33m'
@@ -66,7 +74,7 @@ for arg in "$@"; do
 done
 done
 
 
 info "开始部署 充电项目 (目标=$TARGET, 零停机=$NO_STOP)"
 info "开始部署 充电项目 (目标=$TARGET, 零停机=$NO_STOP)"
-info "Node:${NODE_MAX_MEM}M | Maven:${MAVEN_XMX}M | Admin-JVM:${ADMIN_XMX}M | Miniapp-JVM:${MINIAPP_XMX}M"
+info "Maven:$MVN | NPM:$NPM | Node:${NODE_MAX_MEM}M | Admin-JVM:${ADMIN_XMX}M | Miniapp-JVM:${MINIAPP_XMX}M"
 
 
 # ---- 拉取代码 ----
 # ---- 拉取代码 ----
 info "拉取最新代码..."
 info "拉取最新代码..."
@@ -116,55 +124,72 @@ if [ "$NO_STOP" = false ]; then
 fi
 fi
 
 
 # ============================================================
 # ============================================================
-# 阶段 2: 构建
+# 阶段 2: 安装公共模块到本地仓库 (对齐 Jenkins mvn install 流程)
+# ============================================================
+info "安装公共模块到本地仓库..."
+(
+    cd "$CODE_DIR"
+    low_prio $MVN install -DskipTests -Dmaven.test.skip=true
+) || { error "Maven install 失败"; exit 1; }
+
+# ============================================================
+# 阶段 3: 前端构建
 # ============================================================
 # ============================================================
 
 
 if [ "$SKIP_FRONTEND" = false ] && [ "$TARGET" != "miniapp" ]; then
 if [ "$SKIP_FRONTEND" = false ] && [ "$TARGET" != "miniapp" ]; then
-    # 管理后台前端
+    # ---- 管理后台前端 (admin-web) ----
     info "构建前端 admin-web ..."
     info "构建前端 admin-web ..."
+
+    # 清理旧前端产物,避免残留文件打入 jar
+    rm -rf "$CODE_DIR/admin/src/main/resources/static/"
+    mkdir -p "$CODE_DIR/admin/src/main/resources/static/"
+
     (
     (
         cd "$CODE_DIR/admin-web" || exit 1
         cd "$CODE_DIR/admin-web" || exit 1
         export NODE_OPTIONS="--max-old-space-size=$NODE_MAX_MEM"
         export NODE_OPTIONS="--max-old-space-size=$NODE_MAX_MEM"
-        low_prio npm run build
+        $NPM install
+        low_prio $NPM run build
     ) || { error "admin-web 构建失败"; exit 1; }
     ) || { error "admin-web 构建失败"; exit 1; }
     info "admin-web 构建完成"
     info "admin-web 构建完成"
 
 
-    # 小程序前端 (H5 端)
+    # ---- 小程序前端 (charge-front, uni-app) ----
     info "构建前端 charge-front ..."
     info "构建前端 charge-front ..."
     (
     (
         # uni-app CLI 依赖,首次部署需全局安装
         # uni-app CLI 依赖,首次部署需全局安装
         if ! command -v uni >/dev/null 2>&1; then
         if ! command -v uni >/dev/null 2>&1; then
             info "安装 @dcloudio/uvm ..."
             info "安装 @dcloudio/uvm ..."
-            npm install -g @dcloudio/uvm
+            $NPM install -g @dcloudio/uvm
         fi
         fi
         cd "$CODE_DIR/charge-front" || exit 1
         cd "$CODE_DIR/charge-front" || exit 1
         export NODE_OPTIONS="--max-old-space-size=$NODE_MAX_MEM"
         export NODE_OPTIONS="--max-old-space-size=$NODE_MAX_MEM"
-        low_prio npm run build
+        $NPM install
+        low_prio $NPM run build
     ) || { error "charge-front 构建失败"; exit 1; }
     ) || { error "charge-front 构建失败"; exit 1; }
     info "charge-front 构建完成"
     info "charge-front 构建完成"
 fi
 fi
 
 
+# ============================================================
+# 阶段 4: Maven 打包
+# ============================================================
 export MAVEN_OPTS="-Xmx${MAVEN_XMX}m -Xms${MAVEN_XMS}m -XX:+UseG1GC"
 export MAVEN_OPTS="-Xmx${MAVEN_XMX}m -Xms${MAVEN_XMS}m -XX:+UseG1GC"
 
 
 if [ "$TARGET" = "miniapp" ]; then
 if [ "$TARGET" = "miniapp" ]; then
     info "Maven 打包 (仅 miniapp)..."
     info "Maven 打包 (仅 miniapp)..."
     (
     (
-        cd "$CODE_DIR"
-        low_prio mvn clean package -DskipTests -pl miniapp -am \
-            -T "${MAVEN_THREADS}" -Dmaven.test.skip=true
+        cd "$CODE_DIR/miniapp"
+        low_prio $MVN clean package -DskipTests -Dmaven.test.skip=true
     ) || { error "Maven 打包失败"; exit 1; }
     ) || { error "Maven 打包失败"; exit 1; }
 elif [ "$TARGET" = "admin" ]; then
 elif [ "$TARGET" = "admin" ]; then
     info "Maven 打包 (仅 admin)..."
     info "Maven 打包 (仅 admin)..."
     (
     (
-        cd "$CODE_DIR"
-        low_prio mvn clean package -DskipTests -pl admin -am \
-            -T "${MAVEN_THREADS}" -Dmaven.test.skip=true
+        cd "$CODE_DIR/admin"
+        low_prio $MVN clean package -DskipTests -Dmaven.test.skip=true
     ) || { error "Maven 打包失败"; exit 1; }
     ) || { error "Maven 打包失败"; exit 1; }
 else
 else
     info "Maven 打包 (全量, 线程=${MAVEN_THREADS})..."
     info "Maven 打包 (全量, 线程=${MAVEN_THREADS})..."
     (
     (
         cd "$CODE_DIR"
         cd "$CODE_DIR"
-        low_prio mvn clean package -DskipTests \
+        low_prio $MVN clean package -DskipTests \
             -T "${MAVEN_THREADS}" \
             -T "${MAVEN_THREADS}" \
             -Dmaven.test.skip=true \
             -Dmaven.test.skip=true \
             -Dmaven.compiler.fork=false
             -Dmaven.compiler.fork=false
@@ -174,7 +199,7 @@ fi
 sleep 2
 sleep 2
 
 
 # ============================================================
 # ============================================================
-# 阶段 3: 备份 & 部署 & 启动
+# 阶段 5: 备份 & 部署 & 启动
 # ============================================================
 # ============================================================
 
 
 backup_and_copy() {
 backup_and_copy() {