推送自动部署
服务器每 60 秒检查两个仓库的 master,发现新提交后自动发布。其他分支不发布。
- 后端:
wikiboss/chengduzhongchuliang→/www/wwwroot/grain.gynhc.com - 大屏:
wikiboss/zhongculiang的 HTML、css、js、assets 源文件 → 后端public/screen
前端直接发布静态源文件,不依赖提交者是否更新 dist。后端发布 application、public、extend、addons;public/screen 由前端仓库独立管理。数据库配置、站点配置、上传文件、环境变量、runtime、vendor 和框架不覆盖。SQL 文件不会自动导入,数据库结构变更需要单独迁移。
脚本使用独立 Git 缓存,不重置网站目录内原有 Git 工作区。变更先备份,PHP 语法检查通过后逐文件替换,接口和页面检查失败会恢复本轮文件,下一轮会重试。前后端分别记录部署结果。
服务器文件:
- 程序:
/opt/grain-auto-deploy/auto_deploy.py - 配置:
/etc/grain-auto-deploy.json - 版本及文件清单:
/var/lib/grain-auto-deploy/backend.json、frontend.json - 备份:
/var/lib/grain-auto-deploy/backups/ - 日志:
/var/log/grain-auto-deploy.log,以及journalctl -u grain-auto-deploy.service
运维命令:
systemctl list-timers grain-auto-deploy.timer
systemctl start grain-auto-deploy.service
systemctl stop grain-auto-deploy.timer # 暂停后续自动发布
systemctl start grain-auto-deploy.timer # 恢复
tail -n 60 /var/log/grain-auto-deploy.log
首次安装需将程序、service、timer 文件安装到上述位置,写入部署配置并运行 systemctl daemon-reload 和 systemctl enable --now grain-auto-deploy.timer。程序以网站用户 www 运行,仅开放站点、状态、备份和日志的写权限,Git 工作区及线上配置额外设为只读。配置文件由 root:www 持有,权限 0640;程序及 systemd 单元仅 root 可修改。普通业务推送不会替换正在执行的部署程序。
验证:python3 -m unittest discover -s ops -p test_auto_deploy.py。