Files
schoolNews/build.bat

318 lines
9.2 KiB
Batchfile
Raw Normal View History

2025-11-24 11:50:15 +08:00
@echo off
chcp 65001 >nul
REM ========================================
REM 校园新闻管理系统 - 构建和打包脚本 (Windows)
REM 功能:
REM 1. 从git拉取最新代码
REM 2. 编译后端jar包
REM 3. 构建前端dist
REM 4. 制作Docker镜像
REM 5. 保存镜像到文件(用于离线部署)
REM ========================================
setlocal enabledelayedexpansion
REM 颜色定义
set "INFO=[92m[INFO][0m"
set "WARN=[93m[WARN][0m"
set "ERROR=[91m[ERROR][0m"
set "STEP=[94m[STEP][0m"
REM 项目路径
set "PROJECT_ROOT=%~dp0"
set "SERV_PATH=%PROJECT_ROOT%schoolNewsServ"
set "WEB_PATH=%PROJECT_ROOT%schoolNewsWeb"
set "DOCKER_PATH=%PROJECT_ROOT%docker"
set "BUILD_OUTPUT=%PROJECT_ROOT%build-output"
REM 生成版本号
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
for /f "tokens=1-2 delims=/: " %%a in ('time /t') do (set mytime=%%a%%b)
set "IMAGE_VERSION=%mydate%_%mytime%"
echo ==========================================
echo 校园新闻管理系统 - 构建脚本
echo ==========================================
echo %INFO% 构建版本: %IMAGE_VERSION%
echo %INFO% 项目路径: %PROJECT_ROOT%
echo ==========================================
echo.
REM 创建输出目录
if not exist "%BUILD_OUTPUT%" mkdir "%BUILD_OUTPUT%"
REM ================================================
REM 步骤1: Git Pull
REM ================================================
echo %STEP% 步骤1: 拉取最新代码
cd "%PROJECT_ROOT%"
REM 检查git状态
git status --short >nul 2>&1
if %errorlevel% neq 0 (
echo %WARN% 未检测到git仓库跳过代码拉取
goto build_backend
)
echo %INFO% 从远程仓库拉取代码...
git pull origin main 2>nul
if errorlevel 1 (
git pull origin master 2>nul
if errorlevel 1 (
echo %WARN% 代码拉取失败或已是最新版本,继续构建...
) else (
echo %INFO% 代码拉取完成
)
) else (
echo %INFO% 代码拉取完成
)
echo.
REM ================================================
REM 步骤2: 构建后端jar包
REM ================================================
:build_backend
echo %STEP% 步骤2: 构建后端jar包
cd "%SERV_PATH%"
echo %INFO% 清理旧的构建...
call mvn clean -q
echo %INFO% 开始编译后端项目...
echo %INFO% 执行: mvn package -DskipTests -pl admin -am
call mvn package -DskipTests -pl admin -am
if errorlevel 1 (
echo %ERROR% 后端编译失败
pause
exit /b 1
)
echo %INFO% 后端编译成功
REM 验证jar包
set "JAR_FILE=%SERV_PATH%\admin\target\admin-1.0.0.jar"
if exist "%JAR_FILE%" (
for %%F in ("%JAR_FILE%") do set "JAR_SIZE=%%~zF"
set /a "JAR_SIZE_MB=!JAR_SIZE! / 1048576"
echo %INFO% ✅ jar包已生成: !JAR_SIZE_MB!MB
echo %INFO% 路径: %JAR_FILE%
) else (
echo %ERROR% ❌ jar包未找到
pause
exit /b 1
)
echo.
REM ================================================
REM 步骤3: 构建前端dist
REM ================================================
echo %STEP% 步骤3: 构建前端项目
cd "%WEB_PATH%"
REM 检查node_modules
if not exist "node_modules" (
echo %INFO% 安装前端依赖...
call npm install
if errorlevel 1 (
echo %ERROR% 依赖安装失败
pause
exit /b 1
)
)
echo %INFO% 清理旧的构建...
if exist "dist" rd /s /q "dist"
echo %INFO% 开始构建前端项目...
echo %INFO% 执行: npm run build
call npm run build
if errorlevel 1 (
echo %ERROR% 前端构建失败
pause
exit /b 1
)
echo %INFO% 前端构建成功
REM 验证dist目录
set "DIST_DIR=%WEB_PATH%\dist"
if exist "%DIST_DIR%" (
for /f %%A in ('dir /s /b "%DIST_DIR%\*" ^| find /c /v ""') do set "FILE_COUNT=%%A"
echo %INFO% ✅ dist目录已生成 (!FILE_COUNT!个文件)
echo %INFO% 路径: %DIST_DIR%
) else (
echo %ERROR% ❌ dist目录未找到
pause
exit /b 1
)
echo.
REM ================================================
REM 步骤4: 制作Docker镜像
REM ================================================
echo %STEP% 步骤4: 制作Docker镜像
cd "%PROJECT_ROOT%"
REM 构建后端镜像
echo %INFO% 构建后端镜像...
echo %INFO% 执行: docker build -t school-news-serv:%IMAGE_VERSION% -f docker\Dockerfile.serv .
docker build -t school-news-serv:%IMAGE_VERSION% -f docker\Dockerfile.serv .
if errorlevel 1 (
echo %ERROR% ❌ 后端镜像构建失败
pause
exit /b 1
)
echo %INFO% ✅ 后端镜像构建成功
REM 打latest标签
docker tag school-news-serv:%IMAGE_VERSION% school-news-serv:latest
echo %INFO% 镜像标签: school-news-serv:%IMAGE_VERSION%
echo %INFO% 镜像标签: school-news-serv:latest
echo.
REM 构建前端镜像
echo %INFO% 构建前端镜像...
echo %INFO% 执行: docker build -t school-news-web:%IMAGE_VERSION% -f docker\Dockerfile.web .
docker build -t school-news-web:%IMAGE_VERSION% -f docker\Dockerfile.web .
if errorlevel 1 (
echo %ERROR% ❌ 前端镜像构建失败
pause
exit /b 1
)
echo %INFO% ✅ 前端镜像构建成功
REM 打latest标签
docker tag school-news-web:%IMAGE_VERSION% school-news-web:latest
echo %INFO% 镜像标签: school-news-web:%IMAGE_VERSION%
echo %INFO% 镜像标签: school-news-web:latest
echo.
REM 查看镜像信息
echo %INFO% Docker镜像列表:
docker images | findstr "school-news"
echo.
REM ================================================
REM 步骤5: 保存镜像到文件
REM ================================================
echo %STEP% 步骤5: 保存Docker镜像
cd "%BUILD_OUTPUT%"
REM 保存后端镜像
set "SERV_IMAGE_FILE=school-news-serv_%IMAGE_VERSION%.tar"
echo %INFO% 保存后端镜像到文件...
echo %INFO% 执行: docker save -o %SERV_IMAGE_FILE% school-news-serv:%IMAGE_VERSION%
docker save -o "%SERV_IMAGE_FILE%" school-news-serv:%IMAGE_VERSION%
if errorlevel 1 (
echo %ERROR% ❌ 后端镜像保存失败
pause
exit /b 1
)
for %%F in ("%SERV_IMAGE_FILE%") do set "SERV_SIZE=%%~zF"
set /a "SERV_SIZE_MB=!SERV_SIZE! / 1048576"
echo %INFO% ✅ 后端镜像已保存: !SERV_SIZE_MB!MB
echo %INFO% 文件: %BUILD_OUTPUT%\%SERV_IMAGE_FILE%
echo.
REM 保存前端镜像
set "WEB_IMAGE_FILE=school-news-web_%IMAGE_VERSION%.tar"
echo %INFO% 保存前端镜像到文件...
echo %INFO% 执行: docker save -o %WEB_IMAGE_FILE% school-news-web:%IMAGE_VERSION%
docker save -o "%WEB_IMAGE_FILE%" school-news-web:%IMAGE_VERSION%
if errorlevel 1 (
echo %ERROR% ❌ 前端镜像保存失败
pause
exit /b 1
)
for %%F in ("%WEB_IMAGE_FILE%") do set "WEB_SIZE=%%~zF"
set /a "WEB_SIZE_MB=!WEB_SIZE! / 1048576"
echo %INFO% ✅ 前端镜像已保存: !WEB_SIZE_MB!MB
echo %INFO% 文件: %BUILD_OUTPUT%\%WEB_IMAGE_FILE%
echo.
REM ================================================
REM 生成部署说明文件
REM ================================================
echo %INFO% 生成部署说明文件...
set "DEPLOY_INFO_FILE=%BUILD_OUTPUT%\部署说明_%IMAGE_VERSION%.txt"
(
echo ========================================
echo 校园新闻管理系统 - Docker镜像部署说明
echo ========================================
echo.
echo 构建信息:
echo 构建时间: %date% %time%
echo 版本号: %IMAGE_VERSION%
echo 构建主机: %COMPUTERNAME%
echo.
echo 镜像文件:
echo 后端镜像: %SERV_IMAGE_FILE% ^(!SERV_SIZE_MB!MB^)
echo 前端镜像: %WEB_IMAGE_FILE% ^(!WEB_SIZE_MB!MB^)
echo.
echo ========================================
echo 部署步骤:
echo ========================================
echo.
echo 1. 将镜像文件传输到目标服务器
echo.
echo 2. 加载Docker镜像:
echo docker load -i %SERV_IMAGE_FILE%
echo docker load -i %WEB_IMAGE_FILE%
echo.
echo 3. 验证镜像:
echo docker images ^| findstr school-news
echo.
echo 4. 启动服务:
echo cd docker
echo docker-compose up -d
echo.
echo 5. 查看服务状态:
echo docker-compose ps
echo docker-compose logs -f
echo.
echo ========================================
echo 访问地址:
echo ========================================
echo 前端: http://localhost:8080/schoolNewsWeb/
echo 后端: http://localhost:8081/schoolNewsServ
echo.
echo ========================================
echo 注意事项:
echo ========================================
echo 1. 确保目标服务器已安装Docker和Docker Compose
echo 2. 确保端口8080、8081、3306、6379未被占用
echo 3. 首次部署需要准备数据库初始化脚本
echo 4. 生产环境请修改默认密码(.env文件
echo.
echo ========================================
) > "%DEPLOY_INFO_FILE%"
echo %INFO% ✅ 部署说明已生成: %DEPLOY_INFO_FILE%
echo.
REM ================================================
REM 构建摘要
REM ================================================
echo ==========================================
echo 构建完成!
echo ==========================================
echo %INFO% 构建版本: %IMAGE_VERSION%
echo.
echo %INFO% Docker镜像:
echo - school-news-serv:%IMAGE_VERSION%
echo - school-news-web:%IMAGE_VERSION%
echo.
echo %INFO% 镜像文件保存在: %BUILD_OUTPUT%\
dir /b "%BUILD_OUTPUT%\*.tar" "%BUILD_OUTPUT%\*.txt" 2>nul
echo.
echo %INFO% 下一步操作:
echo 1. 查看部署说明: %DEPLOY_INFO_FILE%
echo 2. 传输镜像文件到目标服务器
echo 3. 在目标服务器加载镜像: docker load -i ^<镜像文件^>
echo 4. 启动服务: cd docker ^&^& docker-compose up -d
echo ==========================================
echo.
pause