Files
happy-life-star/backend/build-all.sh
T
peanut 26f0cdd760 feat: 完成项目整理优化和生产环境配置
🧹 项目结构优化:
- 删除重复和过时的文件
- 整理文档到docs目录结构
- 优化配置文件到configs目录
- 创建清晰的PROJECT_STRUCTURE.md

🔧 中间件配置:
- 重启MySQL/Redis/Nacos中间件
- 使用现有数据目录,确保数据完整性
- 统一密码配置: MySQL(EmotionMuseum2025*#), Nacos(Peanut2817*#)

🌐 Nginx配置:
- 配置前端路径: /emotion-museum
- 配置API代理: /api/ -> 19000
- 配置WebSocket代理: /ws/ -> 19007
- 添加健康检查端点: /health

📋 部署脚本优化:
- restart-middleware.sh - 中间件重启脚本
- setup-nginx.sh - Nginx配置脚本
- cleanup-project.sh - 项目清理脚本
- one-click-deploy.sh - 一键部署脚本

📖 文档完善:
- DEPLOYMENT_FINAL.md - 最终部署指南
- PROJECT_STRUCTURE.md - 项目结构说明
- 完整的运维和故障排查指南

 生产环境就绪:
- 中间件: MySQL/Redis/Nacos 运行正常
- Nginx: 反向代理配置完成
- 访问地址: http://47.111.10.27/emotion-museum
- 健康检查: http://47.111.10.27/health

🎯 项目现状:
- 10个微服务模块完整
- 前后端分离架构
- 容器化部署
- 统一配置管理
- 完整的部署和运维体系
2025-07-21 13:55:36 +08:00

262 lines
7.0 KiB
Bash
Executable File

#!/bin/bash
# 情感博物馆 - Jenkins构建脚本
# 作者: emotion-museum
# 日期: 2025-07-18
# 用途: 在Jenkins服务器上构建所有微服务jar包
set -e
# 配置变量
PROFILE="${DEPLOY_ENV:-test}"
PROJECT_NAME="${PROJECT_NAME:-emotion-museum}"
# Jenkins构建信息
BUILD_NUMBER="${BUILD_NUMBER:-manual}"
JOB_NAME="${JOB_NAME:-local-build}"
BUILD_URL="${BUILD_URL:-}"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
# 服务列表
SERVICES=(
"emotion-gateway:19000"
"emotion-user:19001"
"emotion-ai:19002"
"emotion-record:19003"
"emotion-growth:19004"
"emotion-explore:19005"
"emotion-reward:19006"
"emotion-websocket:19007"
"emotion-auth:19008"
"emotion-stats:19009"
)
# 检查构建环境
check_build_environment() {
log_info "检查构建环境..."
# 检查Java版本
if command -v java &> /dev/null; then
local java_version=$(java -version 2>&1 | head -1 | cut -d'"' -f2)
log_info "Java版本: $java_version"
else
log_error "Java未安装"
exit 1
fi
# 检查Maven版本
if command -v mvn &> /dev/null; then
local maven_version=$(mvn -version | head -1 | awk '{print $3}')
log_info "Maven版本: $maven_version"
else
log_error "Maven未安装"
exit 1
fi
# 检查是否在Jenkins环境中
if [ -n "$JENKINS_HOME" ] || [ -n "$BUILD_NUMBER" ]; then
log_info "检测到Jenkins环境"
log_info "构建编号: $BUILD_NUMBER"
log_info "任务名称: $JOB_NAME"
else
log_info "本地构建环境"
fi
log_success "构建环境检查通过"
}
# 清理旧的构建产物
clean_old_artifacts() {
log_info "清理旧的构建产物..."
# 清理父项目
mvn clean -q
# 清理各个子模块
for service_info in "${SERVICES[@]}"; do
service_name=$(echo $service_info | cut -d':' -f1)
if [ -d "$service_name" ]; then
log_info "清理模块: $service_name"
cd $service_name
mvn clean -q
cd ..
fi
done
log_success "构建产物清理完成"
}
# 构建所有服务
build_all_services() {
log_info "开始构建所有微服务..."
# 先构建父项目
log_info "构建父项目..."
if mvn install -DskipTests -q; then
log_success "父项目构建成功"
else
log_error "父项目构建失败"
exit 1
fi
# 构建各个微服务
local build_success=0
local build_failed=0
for service_info in "${SERVICES[@]}"; do
service_name=$(echo $service_info | cut -d':' -f1)
log_info "构建服务: $service_name"
if [ ! -d "$service_name" ]; then
log_warning "服务目录不存在: $service_name"
continue
fi
cd $service_name
if mvn package -DskipTests -P${PROFILE} -q; then
# 检查jar包是否生成
if [ -f "target/${service_name}-1.0.0.jar" ]; then
local jar_size=$(du -h "target/${service_name}-1.0.0.jar" | cut -f1)
log_success "$service_name 构建成功 (大小: $jar_size)"
build_success=$((build_success + 1))
else
log_error "$service_name jar包未生成"
build_failed=$((build_failed + 1))
fi
else
log_error "$service_name 构建失败"
build_failed=$((build_failed + 1))
fi
cd ..
done
log_info "构建统计: 成功 $build_success, 失败 $build_failed"
if [ $build_failed -eq 0 ]; then
log_success "所有服务构建成功"
return 0
else
log_error "部分服务构建失败"
return 1
fi
}
# 生成构建报告
generate_build_report() {
local total_time=$1
echo ""
echo "========================================"
echo " 构建完成报告"
echo "========================================"
echo "项目名称: $PROJECT_NAME"
echo "构建环境: $PROFILE"
echo "构建时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "总耗时: ${total_time}s"
if [ "$BUILD_NUMBER" != "manual" ]; then
echo "Jenkins构建: #$BUILD_NUMBER"
echo "Jenkins任务: $JOB_NAME"
[ -n "$BUILD_URL" ] && echo "构建链接: $BUILD_URL"
fi
echo "========================================"
echo ""
echo "📦 构建产物详情:"
printf "%-20s %-10s %-10s %s\n" "服务名称" "状态" "大小" "路径"
echo "----------------------------------------"
local total_size=0
for service_info in "${SERVICES[@]}"; do
service_name=$(echo $service_info | cut -d':' -f1)
jar_file="${service_name}/target/${service_name}-1.0.0.jar"
if [ -f "$jar_file" ]; then
jar_size=$(du -h "$jar_file" | cut -f1)
# 兼容macOS和Linux的文件大小获取
if [[ "$OSTYPE" == "darwin"* ]]; then
jar_bytes=$(stat -f%z "$jar_file" 2>/dev/null || echo "0")
else
jar_bytes=$(stat -c%s "$jar_file" 2>/dev/null || echo "0")
fi
total_size=$((total_size + jar_bytes))
printf "%-20s ${GREEN}%-10s${NC} %-10s %s\n" "$service_name" "✅ 成功" "$jar_size" "$jar_file"
else
printf "%-20s ${RED}%-10s${NC} %-10s %s\n" "$service_name" "❌ 失败" "N/A" "未生成"
fi
done
echo ""
echo "📊 构建统计:"
echo " 总产物大小: $(echo $total_size | awk '{printf "%.1fMB", $1/1024/1024}')"
echo " 构建工作空间: $(pwd)"
echo ""
echo "========================================"
echo "🎉 构建任务完成!"
}
# 主函数
main() {
local start_time=$(date +%s)
log_info "🔨 开始Jenkins构建任务..."
log_info "构建环境: $PROFILE"
log_info "项目名称: $PROJECT_NAME"
# 检查构建环境
check_build_environment
# 清理旧产物
clean_old_artifacts
# 构建所有服务
if build_all_services; then
log_success "所有服务构建成功"
build_result=0
else
log_error "部分服务构建失败"
build_result=1
fi
# 计算总耗时
local end_time=$(date +%s)
local total_time=$((end_time - start_time))
# 生成构建报告
generate_build_report $total_time
# 返回构建结果
if [ $build_result -eq 0 ]; then
log_success "🎉 Jenkins构建任务完成!"
exit 0
else
log_error "⚠️ 构建任务部分失败,请检查错误日志"
exit 1
fi
}
# 执行主函数
main "$@"