sol-cloud/script/build.sh

121 lines
2.8 KiB
Bash

#!/bin/bash
set -e
cd ..
# ANSI 颜色
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
RESET='\033[0m'
# 打印函数
print_info() {
echo -e "${BLUE}📘 $1${RESET}"
}
print_step() {
echo -e "\n${YELLOW}🚀 $1${RESET}"
}
print_success() {
echo -e "${GREEN}$1${RESET}"
}
print_error() {
echo -e "${RED}$1${RESET}"
}
print_divider() {
echo -e "${YELLOW}----------------------------------------${RESET}"
}
print_divider
print_step "进入 docker 目录 📁"
cd docker || { print_error "❌ 未找到 docker 目录"; exit 1; }
print_step "关闭现有 Docker Compose 服务 🧹"
docker compose down || { print_error "❌ docker compose down 执行失败"; exit 1; }
print_step "退出 docker 目录 🚪"
cd ..
# 模块配置
BACKEND_MODULES=(
"gateway-9527"
"web-system-8081"
"web-file-8082"
)
# 后端构建阶段
print_divider
print_step "开始后端构建 🏗️"
cd cloud
export MAVEN_OPTS="--add-opens=java.base/java.lang=ALL-UNNAMED"
print_info "🔨 执行 Maven 构建..."
mvn clean package -DskipTests
cd ..
print_success "🎉 后端构建成功!"
# 清理输出目录
SERVER_OUTPUT_DIR="docker/output/server"
print_info "🧹 清理后端输出目录..."
rm -rf "${SERVER_OUTPUT_DIR}"
mkdir -p "${SERVER_OUTPUT_DIR}"
# 拷贝构建产物
copy_backend_module() {
local module=$1
local module_dir="cloud/web/${module}"
[[ "${module}" == "gateway-9527" ]] && module_dir="cloud/${module}"
local output_dir="${SERVER_OUTPUT_DIR}/${module}"
mkdir -p "${output_dir}/classes"
print_info "📦 处理模块:${module}"
rsync -a --exclude='com/bgasol/**' "${module_dir}/target/classes/" "${output_dir}/classes/"
cp "${module_dir}/target/"*.jar "${output_dir}/app.jar"
print_success "📁 模块 ${module} 输出完成 → ${output_dir}"
}
print_step "📂 开始复制后端构建产物..."
for module in "${BACKEND_MODULES[@]}"; do
copy_backend_module "${module}"
done
print_success "🏁 后端构建产物整理完毕"
# 前端构建阶段
print_divider
print_step "开始前端构建 🌐"
cd client
print_info "📦 安装依赖 (npm install)..."
npm install
print_info "🧱 执行构建 (npm run build)..."
npm run build
cd ..
print_success "🎊 前端构建完成"
# 前端构建产物复制
FRONTEND_OUTPUT_DIR="docker/output/client"
print_info "🧹 清理前端输出目录..."
rm -rf "${FRONTEND_OUTPUT_DIR}"
mkdir -p "${FRONTEND_OUTPUT_DIR}"
print_info "📂 拷贝前端构建结果..."
cp -r client/dist/* "${FRONTEND_OUTPUT_DIR}/"
print_success "📁 前端输出完成 → ${FRONTEND_OUTPUT_DIR}"
# 完整构建成功
print_divider
echo -e "${GREEN}🎉🎉🎉 全部构建完成!${RESET}"
echo -e "🔧 后端输出目录: ${SERVER_OUTPUT_DIR}"
echo -e "💻 前端输出目录: ${FRONTEND_OUTPUT_DIR}"
print_divider