fundplatform/scripts/deploy/deploy-service.sh
zhangjf fe51e87c17 fix: 调整服务部署脚本
- 启动脚本路径改为 bin 目录
- 只更新服务jar和fund-common*.jar,不再全量覆盖lib目录
2026-02-23 15:08:04 +08:00

150 lines
4.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================
# 服务部署脚本
# 用法: ./deploy-service.sh <服务名> [本地tar.gz文件路径]
# 示例: ./deploy-service.sh fund-gateway
# ./deploy-service.sh fund-gateway /path/to/fund-gateway.tar.gz
# ============================================
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
source "$SCRIPT_DIR/deploy-config.sh"
# 检查参数
if [ -z "$1" ]; then
log_error "请指定服务名称"
echo "可用服务:"
for svc in "${SERVICES[@]}"; do
echo " - $svc"
done
exit 1
fi
SERVICE_NAME="$1"
# 获取本地tar.gz文件路径
if [ -n "$2" ]; then
LOCAL_TAR="$2"
else
# 默认使用deploy目录下的服务tar.gz文件
LOCAL_TAR="$SCRIPT_DIR/$LOCAL_DEPLOY_DIR/${SERVICE_NAME}.tar.gz"
fi
SERVICE_DEPLOY_PATH="$SERVICE_DEPLOY_BASE/$SERVICE_NAME"
log_info "============================================"
log_info "服务部署开始: $SERVICE_NAME"
log_info "============================================"
log_info "本地文件: $LOCAL_TAR"
log_info "远程路径: $SERVICE_DEPLOY_PATH"
log_info ""
# 检查sshpass
check_sshpass
# 检查本地文件是否存在
if [ ! -f "$LOCAL_TAR" ]; then
log_error "本地tar.gz文件不存在: $LOCAL_TAR"
exit 1
fi
# 显示文件大小
FILE_SIZE=$(ls -lh "$LOCAL_TAR" | awk '{print $5}')
log_info "文件大小: $FILE_SIZE"
# 1. 检查远程服务目录是否存在
log_info "检查远程服务目录..."
DIR_EXISTS=$(remote_exec "if [ -d '$SERVICE_DEPLOY_PATH' ]; then echo 'yes'; else echo 'no'; fi")
if [ "$DIR_EXISTS" != "yes" ]; then
log_error "远程服务目录不存在: $SERVICE_DEPLOY_PATH"
log_error "请先完整部署服务"
exit 1
fi
# 2. 备份旧版本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; \
fi && \
if ls fund-common*.jar 1>/dev/null 2>&1; then \
cp fund-common*.jar ../backup/\$BACKUP_NAME/ 2>/dev/null; \
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. 解压并更新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. 验证部署
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")
log_info "服务jar数: $SERVICE_JAR_COUNT, fund-common jar数: $COMMON_JAR_COUNT"
log_info "============================================"
log_info "服务部署完成: $SERVICE_NAME"
log_info "============================================"