From 112a97056316dde9d0473231b71ce41f829a2190 Mon Sep 17 00:00:00 2001 From: zhangjf Date: Mon, 23 Feb 2026 15:35:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9C=8D=E5=8A=A1=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BC=98=E5=8C=96=EF=BC=8C=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=95=B4=E4=B8=AAtar.gz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 本地解压tar.gz提取jar文件 - 只上传服务jar和fund-common*.jar - 大幅减少上传时间和带宽消耗 --- scripts/deploy/deploy-service.sh | 149 +++++++++++++++++-------------- 1 file changed, 80 insertions(+), 69 deletions(-) diff --git a/scripts/deploy/deploy-service.sh b/scripts/deploy/deploy-service.sh index b24945b..9d2459a 100755 --- a/scripts/deploy/deploy-service.sh +++ b/scripts/deploy/deploy-service.sh @@ -4,6 +4,7 @@ # 用法: ./deploy-service.sh <服务名> [本地tar.gz文件路径] # 示例: ./deploy-service.sh fund-gateway # ./deploy-service.sh fund-gateway /path/to/fund-gateway.tar.gz +# 注意: 只上传服务jar和fund-common*.jar,不上传整个tar.gz # ============================================ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" @@ -49,7 +50,7 @@ fi # 显示文件大小 FILE_SIZE=$(ls -lh "$LOCAL_TAR" | awk '{print $5}') -log_info "文件大小: $FILE_SIZE" +log_info "tar.gz文件大小: $FILE_SIZE" # 1. 检查远程服务目录是否存在 log_info "检查远程服务目录..." @@ -60,85 +61,95 @@ if [ "$DIR_EXISTS" != "yes" ]; then exit 1 fi -# 2. 备份旧版本jar文件 -log_info "备份旧版本jar文件..." +# 2. 本地解压tar.gz,提取jar文件 +log_info "本地解压并提取jar文件..." +TEMP_LOCAL_DIR="/tmp/${SERVICE_NAME}_extract_$$" +mkdir -p "$TEMP_LOCAL_DIR" +cd "$TEMP_LOCAL_DIR" +tar -xzf "$LOCAL_TAR" + +# 查找解压后的目录 +EXTRACTED_DIR=$(ls -d */ 2>/dev/null | head -1 | tr -d '/') + +if [ -z "$EXTRACTED_DIR" ] || [ ! -d "$EXTRACTED_DIR/lib" ]; then + log_error "解压后未找到lib目录" + rm -rf "$TEMP_LOCAL_DIR" + exit 1 +fi + +# 查找服务jar +SERVICE_JAR=$(ls $EXTRACTED_DIR/lib/${SERVICE_NAME}*.jar 2>/dev/null | head -1) +COMMON_JAR=$(ls $EXTRACTED_DIR/lib/fund-common*.jar 2>/dev/null | head -1) + +if [ -z "$SERVICE_JAR" ]; then + log_error "未找到服务jar: ${SERVICE_NAME}*.jar" + rm -rf "$TEMP_LOCAL_DIR" + exit 1 +fi + +log_info "服务jar: $(basename $SERVICE_JAR)" +if [ -n "$COMMON_JAR" ]; then + log_info "fund-common jar: $(basename $COMMON_JAR)" +fi + +# 3. 备份远程旧版本jar文件 +log_info "备份远程旧版本jar文件..." remote_exec "cd '$SERVICE_DEPLOY_PATH/lib' && \ mkdir -p ../backup && \ BACKUP_NAME='jar_backup_\$(date +%Y%m%d_%H%M%S)' && \ mkdir -p ../backup/\$BACKUP_NAME && \ - if [ -f '${SERVICE_NAME}*.jar' ]; then \ - cp ${SERVICE_NAME}*.jar ../backup/\$BACKUP_NAME/ 2>/dev/null; \ + if ls ${SERVICE_NAME}*.jar 1>/dev/null 2>&1; then \ + cp ${SERVICE_NAME}*.jar ../backup/\$BACKUP_NAME/; \ fi && \ if ls fund-common*.jar 1>/dev/null 2>&1; then \ - cp fund-common*.jar ../backup/\$BACKUP_NAME/ 2>/dev/null; \ + cp fund-common*.jar ../backup/\$BACKUP_NAME/; \ fi && \ echo '备份完成: '\$BACKUP_NAME" -# 3. 上传tar.gz文件 -log_info "上传tar.gz文件..." -TEMP_REMOTE_PATH="/tmp/${SERVICE_NAME}-$$.tar.gz" -upload_file "$LOCAL_TAR" "$TEMP_REMOTE_PATH" -log_info "上传完成" +# 4. 停止服务 +log_info "停止服务..." +remote_exec "if [ -f '$SERVICE_DEPLOY_PATH/bin/stop.sh' ]; then \ + cd '$SERVICE_DEPLOY_PATH/bin' && ./stop.sh; \ + sleep 2; \ + echo '服务已停止'; \ +else \ + echo '未找到stop.sh脚本'; \ +fi" -# 4. 解压并更新jar文件 -log_info "解压并更新jar文件..." -remote_exec " - TEMP_DIR=\"/tmp/${SERVICE_NAME}_extract_\$\$\" - mkdir -p \$TEMP_DIR - cd \$TEMP_DIR - tar -xzf '$TEMP_REMOTE_PATH' - - # 查找解压后的目录(通常是服务名目录) - EXTRACTED_DIR=\$(ls -d */ 2>/dev/null | head -1 | tr -d '/') - - if [ -n \"\$EXTRACTED_DIR\" ] && [ -d \"\$EXTRACTED_DIR/lib\" ]; then - # 停止服务(使用bin目录下的脚本) - if [ -f '$SERVICE_DEPLOY_PATH/bin/stop.sh' ]; then - cd '$SERVICE_DEPLOY_PATH/bin' && ./stop.sh - sleep 2 - echo '服务已停止' - fi - - # 只更新当前服务的jar和fund-common*.jar - echo '更新jar文件...' - - # 删除旧的fund-common*.jar - rm -f '$SERVICE_DEPLOY_PATH/lib/fund-common'*.jar 2>/dev/null - - # 复制新的fund-common*.jar - if ls \$EXTRACTED_DIR/lib/fund-common*.jar 1>/dev/null 2>&1; then - cp \$EXTRACTED_DIR/lib/fund-common*.jar '$SERVICE_DEPLOY_PATH/lib/' - echo 'fund-common jar 已更新' - fi - - # 删除旧的服务jar - rm -f '$SERVICE_DEPLOY_PATH/lib/${SERVICE_NAME}'*.jar 2>/dev/null - - # 复制新的服务jar - if ls \$EXTRACTED_DIR/lib/${SERVICE_NAME}*.jar 1>/dev/null 2>&1; then - cp \$EXTRACTED_DIR/lib/${SERVICE_NAME}*.jar '$SERVICE_DEPLOY_PATH/lib/' - echo '${SERVICE_NAME} jar 已更新' - fi - - echo 'jar文件更新完成' - - # 启动服务(使用bin目录下的脚本) - if [ -f '$SERVICE_DEPLOY_PATH/bin/start.sh' ]; then - cd '$SERVICE_DEPLOY_PATH/bin' && ./start.sh - echo '服务已启动' - fi - else - echo '错误: 解压后未找到lib目录' - exit 1 - fi - - # 清理临时文件 - rm -rf \$TEMP_DIR - rm -f '$TEMP_REMOTE_PATH' -" -log_info "解压完成" +# 5. 上传jar文件(只上传变更的文件) +log_info "上传jar文件..." -# 5. 验证部署 +# 上传服务jar +SERVICE_JAR_NAME=$(basename "$SERVICE_JAR") +log_info "上传 $SERVICE_JAR_NAME ($(ls -lh "$SERVICE_JAR" | awk '{print $5}'))..." +upload_file "$SERVICE_JAR" "$SERVICE_DEPLOY_PATH/lib/$SERVICE_JAR_NAME" +log_info "服务jar上传完成" + +# 上传fund-common jar(如果存在) +if [ -n "$COMMON_JAR" ]; then + COMMON_JAR_NAME=$(basename "$COMMON_JAR") + log_info "上传 $COMMON_JAR_NAME ($(ls -lh "$COMMON_JAR" | awk '{print $5}'))..." + + # 先删除远程旧的fund-common*.jar + remote_exec "rm -f '$SERVICE_DEPLOY_PATH/lib/fund-common'*.jar 2>/dev/null" + + upload_file "$COMMON_JAR" "$SERVICE_DEPLOY_PATH/lib/$COMMON_JAR_NAME" + log_info "fund-common jar上传完成" +fi + +# 清理本地临时目录 +rm -rf "$TEMP_LOCAL_DIR" + +# 6. 启动服务 +log_info "启动服务..." +remote_exec "if [ -f '$SERVICE_DEPLOY_PATH/bin/start.sh' ]; then \ + cd '$SERVICE_DEPLOY_PATH/bin' && ./start.sh; \ + echo '服务已启动'; \ +else \ + echo '未找到start.sh脚本,请手动启动'; \ +fi" + +# 7. 验证部署 log_info "验证部署..." SERVICE_JAR_COUNT=$(remote_exec "ls '$SERVICE_DEPLOY_PATH/lib/${SERVICE_NAME}*.jar' 2>/dev/null | wc -l") COMMON_JAR_COUNT=$(remote_exec "ls '$SERVICE_DEPLOY_PATH/lib/fund-common*.jar' 2>/dev/null | wc -l")