2.6 KiB
2.6 KiB
Git 增量部署方案
目标
以 Git 仓库作为唯一源码入口,构建机增量拉取源码并构建镜像,生产服务器只拉取镜像并替换容器。
部署链路
本机提交并推送源码到 Git
-> 构建机 git fetch / reset 到指定提交
-> 构建机 docker build,复用 Docker / Next 缓存
-> 构建机推送 production-<commit> 和 production-latest 镜像标签
-> 生产机拉取指定提交镜像
-> 停旧容器,启动新容器,检查 /api/health
脚本
脚本路径:
.\scripts\git-incremental-deploy.ps1
默认部署:
- Git 仓库:
http://git.1080p.hk/lunanting/gongxiangp2.git - 分支:
main - 构建机:
192.168.40.206 - 生产机:
192.168.58.20 - 正式容器:
youyidian-3d-material - 正式端口:
4320
首次运行前准备
本脚本由维护人员执行,不要求普通用户手动运行。首次在一台新维护机上运行前,需要确认:
- 本机可用 PowerShell 5.1+。
- 本机已安装 PuTTY 工具,
plink.exe和pscp.exe可在 PATH 中找到,或位于C:\Program Files\PuTTY\。 - 本机能访问构建机
192.168.40.206。 - 构建机能访问 Git 仓库和生产机
192.168.58.20。 - 构建机本地 Registry 端口
5000可用。 - 已通过环境变量或参数提供构建机密码:
BUILD_SERVER_PASSWORD或-BuildServerPassword。 - 私有 Git 仓库认证通过
GIT_DEPLOY_USERNAME/GIT_DEPLOY_PASSWORD,或GIT_AUTH_HEADER提供;不要把密码写进仓库 URL。
安全边界
- 不从本机上传源码压缩包。
- 不在生产机上执行
npm install或next build。 - 不改生产机的
.env和 uploads 目录。 - 不把 Git 密码写入仓库或远端 URL。
- 生产容器启动失败时,默认尝试回滚到旧镜像。
- 清理策略只清理无用镜像/容器,默认保留 Docker build cache。
验证方式
正式部署前先执行 DryRun:
.\scripts\git-incremental-deploy.ps1 -DryRun
DryRun 只验证:
- 构建机可连接
- 构建机能读取 Git 仓库
- 构建机能连接生产机
- 构建机 Registry 可用
DryRun 不会改代码、构建镜像或重启生产容器。
镜像标签
每次部署会生成两个标签:
production-<commit>:可回滚的确定版本production-latest:正式环境最新版本
影子环境对应:
shadow-<commit>shadow-latest
回滚思路
脚本启动新容器前会记录旧容器镜像。如果新容器健康检查失败,默认会重新用旧镜像启动容器。
如果需要人工指定旧版本,可以通过 Registry 中的 production-<commit> 标签部署指定提交。