fundplatform/scripts/deploy/deploy-service.sh
zhangjf 1e346c3a2e feat: 添加生产环境部署脚本
- deploy-config.sh: 部署配置文件(服务器信息、路径配置)
- deploy-mobile.sh: 移动端部署脚本
- deploy-admin.sh: 管理后台部署脚本
- deploy-service.sh: 服务部署脚本(只更新lib目录)
- deploy-all.sh: 全量部署脚本
2026-02-23 15:03:14 +08:00

131 lines
3.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. 备份旧版本lib目录
log_info "备份旧版本lib目录..."
remote_exec "cd '$SERVICE_DEPLOY_PATH' && \
mkdir -p backup && \
BACKUP_NAME='lib_backup_\$(date +%Y%m%d_%H%M%S)' && \
if [ -d 'lib' ]; then \
cp -r lib backup/\$BACKUP_NAME; \
echo '备份完成: '\$BACKUP_NAME; \
else \
echo 'lib目录不存在跳过备份'; \
fi"
# 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. 解压并更新lib目录
log_info "解压并更新lib目录..."
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
# 停止服务(如果存在启动脚本)
if [ -f '$SERVICE_DEPLOY_PATH/stop.sh' ]; then
cd '$SERVICE_DEPLOY_PATH' && ./stop.sh
sleep 2
fi
# 删除旧lib目录
rm -rf '$SERVICE_DEPLOY_PATH/lib'
# 复制新lib目录
cp -r \"\$EXTRACTED_DIR/lib\" '$SERVICE_DEPLOY_PATH/'
echo 'lib目录更新完成'
# 启动服务(如果存在启动脚本)
if [ -f '$SERVICE_DEPLOY_PATH/start.sh' ]; then
cd '$SERVICE_DEPLOY_PATH' && ./start.sh
echo '服务已重启'
fi
else
echo '错误: 解压后未找到lib目录'
exit 1
fi
# 清理临时文件
rm -rf \$TEMP_DIR
rm -f '$TEMP_REMOTE_PATH'
"
log_info "解压完成"
# 5. 验证部署
log_info "验证部署..."
JAR_COUNT=$(remote_exec "ls '$SERVICE_DEPLOY_PATH/lib/*.jar' 2>/dev/null | wc -l")
log_info "lib目录jar文件数: $JAR_COUNT"
log_info "============================================"
log_info "服务部署完成: $SERVICE_NAME"
log_info "============================================"