188 lines
5.1 KiB
Batchfile
188 lines
5.1 KiB
Batchfile
@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
|
||
|
||
|
||
|