This commit is contained in:
@@ -477,16 +477,28 @@ chmod 600 /root/.ssh/authorized_keys
|
||||
|
||||
确保有能匹配 `ubuntu-latest` 的在线 Runner。
|
||||
|
||||
PR 合并到 `main` 后,workflow 会:
|
||||
如果 Runner 和生产环境在同一 Docker 宿主机,且公网 IP 不支持 NAT 回环,
|
||||
`DEPLOY_HOST` 可使用 Docker 网桥宿主机地址 `172.17.0.1`。
|
||||
|
||||
先在 Gitea 保护 `main` 分支,禁止直接推送,并要求 `CI / test` 通过后才能合并。
|
||||
|
||||
PR 阶段会执行:
|
||||
|
||||
```text
|
||||
SQLite 快速测试
|
||||
→ 启动 MySQL 8.0.35 临时容器
|
||||
→ MySQL 全量迁移和测试
|
||||
Ruff 静态检查
|
||||
→ SQLite 测试和 75% 覆盖率门槛
|
||||
→ MySQL 8.0.35 全量迁移和测试
|
||||
```
|
||||
|
||||
PR 合并到 `main` 后会执行:
|
||||
|
||||
```text
|
||||
MySQL 8.0.35 发布迁移检查
|
||||
→ SSH 生产服务器
|
||||
→ MySQL 备份
|
||||
→ migrate
|
||||
→ 重启和健康检查
|
||||
→ 重启
|
||||
→ 应用与 Nginx HTTP/WebSocket 冒烟检查
|
||||
```
|
||||
|
||||
## 16. 备份与恢复
|
||||
|
||||
+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