Files
schoolNews/build.bat
2025-11-24 14:01:17 +08:00

318 lines
9.2 KiB
Batchfile
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.

@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