This commit is contained in:
+26
-4
@@ -2,17 +2,39 @@
|
||||
|
||||
Ubuntu 宝塔面板全新服务器请优先阅读 [Ubuntu + 宝塔面板从零部署](BAOTA_UBUNTU_FROM_ZERO.md)。本文只描述自动发布机制。
|
||||
|
||||
PR 质量门禁由 `.gitea/workflows/ci.yml` 执行:
|
||||
|
||||
1. Ruff 静态检查。
|
||||
2. 迁移文件、Django 和 ASGI 导入检查。
|
||||
3. SQLite 单元测试,覆盖率不得低于 75%。
|
||||
4. MySQL 8.0.35 全量迁移和测试。
|
||||
|
||||
同一 PR 推送新提交时,旧 CI 会自动取消。单次 CI 最多运行 20 分钟。
|
||||
|
||||
生产发布由 `.gitea/workflows/deploy.yml` 执行。目标为 `main` 的 PR 被真正合并后:
|
||||
|
||||
1. Runner 检出 `main` 并运行迁移检查、Django 检查和全部测试。
|
||||
2. 测试通过后 SSH 到生产服务器。
|
||||
1. Runner 检出 `main` 并在临时 MySQL 8.0.35 上执行发布迁移检查。
|
||||
2. 检查通过后 SSH 到生产服务器。
|
||||
3. 服务器备份 MySQL,安装依赖,执行迁移并收集静态资源。
|
||||
4. systemd 重启 Django ASGI 服务。
|
||||
5. 分别验证 HTTP、WebSocket 和 Redis Channel Layer。
|
||||
6. 失败时回退应用代码;数据库备份保留,不自动执行破坏性反向迁移。
|
||||
5. 验证应用 HTTP、Redis Channel Layer 和直连 WebSocket。
|
||||
6. 通过 Nginx 验证健康接口、首页、后台、视频目录和 WebSocket。
|
||||
7. Runner 从外部容器网络再次验证 Nginx 健康接口。
|
||||
8. 失败时回退应用代码;数据库备份保留,不自动执行破坏性反向迁移。
|
||||
|
||||
关闭但未合并的 PR 不会部署。同一时间只允许一个生产部署任务执行。
|
||||
|
||||
## main 分支保护
|
||||
|
||||
仓库必须保护 `main` 分支:
|
||||
|
||||
- 禁止直接推送,所有改动必须通过 PR。
|
||||
- 合并前必须通过状态检查 `CI / test`。
|
||||
- 禁止在检查未完成时合并。
|
||||
- 管理员也应遵守分支保护。
|
||||
|
||||
完整测试只在 PR 阶段执行。合并后发布流程不重复运行全量测试,因此分支保护是生产发布的必要条件。
|
||||
|
||||
## Gitea Secrets
|
||||
|
||||
在仓库 `Settings > Actions > Secrets` 配置:
|
||||
|
||||
Reference in New Issue
Block a user