@echo off REM ============================================ REM FLNXI素材库 - Windows 构建脚本 REM ============================================ echo ======================================== echo 构建并推送 Docker 私有镜像 echo ======================================== echo. REM 配置项(请修改为你的仓库地址) set DEFAULT_REGISTRY=your-registry.com set IMAGE_NAME=flnxi-material set DEFAULT_VERSION=1.0.0 REM 读取镜像仓库地址 set /p DOCKER_REGISTRY="请输入镜像仓库地址 (默认: %DEFAULT_REGISTRY%): " if "%DOCKER_REGISTRY%"=="" set DOCKER_REGISTRY=%DEFAULT_REGISTRY% REM 读取版本号 set /p VERSION="请输入版本号 (默认: %DEFAULT_VERSION%): " if "%VERSION%"=="" set VERSION=%DEFAULT_VERSION% set FULL_IMAGE_NAME=%DOCKER_REGISTRY%/%IMAGE_NAME%:%VERSION% set LATEST_IMAGE_NAME=%DOCKER_REGISTRY%/%IMAGE_NAME%:latest echo. echo 将构建以下镜像: echo - %FULL_IMAGE_NAME% echo - %LATEST_IMAGE_NAME% echo. set /p CONFIRM="确认继续? (y/n): " if /i not "%CONFIRM%"=="y" goto :END REM 检查 Docker echo. echo [1/5] 检查 Docker 环境... docker --version >nul 2>&1 if errorlevel 1 ( echo 错误: 未检测到 Docker,请先安装 Docker Desktop echo 下载地址: https://www.docker.com/products/docker-desktop/ goto :END ) echo 成功 - Docker 已安装 REM 登录镜像仓库 echo. echo [2/5] 登录镜像仓库... docker login %DOCKER_REGISTRY% if errorlevel 1 ( echo 错误: 登录失败 goto :END ) echo 成功 - 已登录 REM 构建镜像 echo. echo [3/5] 构建 Docker 镜像... echo 这可能需要几分钟,请耐心等待... docker build -t %FULL_IMAGE_NAME% -t %LATEST_IMAGE_NAME% . if errorlevel 1 ( echo 错误: 构建失败 goto :END ) echo 成功 - 镜像构建完成 REM 测试镜像 echo. echo [4/5] 测试镜像... docker run --rm %FULL_IMAGE_NAME% node --version if errorlevel 1 ( echo 警告: 镜像测试失败 ) else ( echo 成功 - 镜像测试通过 ) REM 推送镜像 echo. echo [5/5] 推送镜像到仓库... docker push %FULL_IMAGE_NAME% if errorlevel 1 ( echo 错误: 推送失败 goto :END ) docker push %LATEST_IMAGE_NAME% if errorlevel 1 ( echo 错误: 推送 latest 标签失败 goto :END ) echo 成功 - 镜像推送完成 REM 显示镜像信息 echo. echo ======================================== echo 构建完成! echo ======================================== echo. echo 镜像信息: echo 版本镜像: %FULL_IMAGE_NAME% echo 最新镜像: %LATEST_IMAGE_NAME% echo. echo 镜像大小: docker images | findstr %IMAGE_NAME% echo. REM 询问是否生成发布包 echo. set /p GENERATE="是否生成客户发布包? (y/n): " if /i not "%GENERATE%"=="y" goto :END REM 生成发布包 echo. echo 生成发布包... set RELEASE_DIR=release-v%VERSION% REM 删除旧的发布目录 if exist %RELEASE_DIR% rmdir /s /q %RELEASE_DIR% mkdir %RELEASE_DIR% REM 复制文件 echo 复制文件... copy docker-compose.prod.yml %RELEASE_DIR%\docker-compose.yml copy .env.template %RELEASE_DIR%\.env copy install.sh %RELEASE_DIR%\ copy install-auto.sh %RELEASE_DIR%\ copy install-auto-windows.bat %RELEASE_DIR%\ copy quick-start.sh %RELEASE_DIR%\ copy healthcheck.sh %RELEASE_DIR%\ copy test-deployment.sh %RELEASE_DIR%\ copy uninstall.sh %RELEASE_DIR%\ copy 客户安装指南.md %RELEASE_DIR%\ copy CUSTOMER_README.md %RELEASE_DIR%\README.md copy VERSION.txt %RELEASE_DIR%\ REM 创建镜像信息文件 echo 镜像信息 > %RELEASE_DIR%\IMAGE_INFO.txt echo ======== >> %RELEASE_DIR%\IMAGE_INFO.txt echo. >> %RELEASE_DIR%\IMAGE_INFO.txt echo 镜像地址: %FULL_IMAGE_NAME% >> %RELEASE_DIR%\IMAGE_INFO.txt echo 版本号: %VERSION% >> %RELEASE_DIR%\IMAGE_INFO.txt echo 构建时间: %date% %time% >> %RELEASE_DIR%\IMAGE_INFO.txt echo. >> %RELEASE_DIR%\IMAGE_INFO.txt echo 使用方法 >> %RELEASE_DIR%\IMAGE_INFO.txt echo ======== >> %RELEASE_DIR%\IMAGE_INFO.txt echo 1. 修改 .env 文件中的 SERVER_IP >> %RELEASE_DIR%\IMAGE_INFO.txt echo 2. 执行 install.sh >> %RELEASE_DIR%\IMAGE_INFO.txt echo. >> %RELEASE_DIR%\IMAGE_INFO.txt echo 详细说明请查看 README.md >> %RELEASE_DIR%\IMAGE_INFO.txt REM 修改 docker-compose.yml 中的镜像地址 echo. echo 更新 docker-compose.yml 中的镜像地址... powershell -Command "(Get-Content %RELEASE_DIR%\docker-compose.yml) -replace '\${DOCKER_REGISTRY:-your-registry.com}', '%DOCKER_REGISTRY%' | Set-Content %RELEASE_DIR%\docker-compose.yml" powershell -Command "(Get-Content %RELEASE_DIR%\docker-compose.yml) -replace '\${IMAGE_TAG:-latest}', '%VERSION%' | Set-Content %RELEASE_DIR%\docker-compose.yml" REM 使用 tar 压缩(如果有) echo. echo 压缩发布包... where tar >nul 2>&1 if errorlevel 1 ( echo. echo 注意: 未找到 tar 命令,无法自动压缩 echo 请手动压缩 %RELEASE_DIR% 目录 echo. echo 发布包目录: %RELEASE_DIR%\ ) else ( tar -czf %RELEASE_DIR%.tar.gz %RELEASE_DIR% echo. echo 成功 - 发布包已生成: %RELEASE_DIR%.tar.gz dir %RELEASE_DIR%.tar.gz ) echo. echo 发布包内容: dir /b %RELEASE_DIR% :END echo. echo ======================================== echo 完成! echo ======================================== echo. pause