docs: close phase7 deployment ci validation
This commit is contained in:
+61
-19
@@ -6,29 +6,30 @@
|
||||
|
||||
### 工作流文件
|
||||
|
||||
**1. `.gitea/workflows/tests.yml` - 自动化测试**
|
||||
**1. `.gitea/workflows/ci-cd.yml` - 代码质量与测试环境校验**
|
||||
|
||||
触发条件:
|
||||
- 每次 push 到 `main`
|
||||
- 每次 push 到 `main` / `develop`
|
||||
- 每次创建 Pull Request
|
||||
|
||||
包含任务:
|
||||
- `test` - 运行集成测试,生成覆盖率报告
|
||||
- `lint` - 运行 Black / Flake8 / MyPy
|
||||
- `validate` - 使用预构建镜像校验 Python/质量工具/测试工具环境
|
||||
- 当前真实 CI 镜像:`xiaoxia-ci-python:3.12`
|
||||
- 依赖在镜像构建阶段安装,避免每次 CI 现场访问 PyPI
|
||||
|
||||
**2. `.gitea/workflows/deploy.yml` - 自动化部署**
|
||||
|
||||
触发条件:
|
||||
- push 到 `main` → 部署到 staging
|
||||
- push 到 `main` / `develop` → 部署到 staging
|
||||
- push tag `v*` → 部署到 production
|
||||
|
||||
实际行为:
|
||||
- runner 在部署主机本机执行 workflow
|
||||
- workflow 将仓库同步到 `/var/lib/xiaoxia-saas-staging/repo` 或 `/var/lib/xiaoxia-saas-production/repo`
|
||||
- 读取服务器本地真实 `.env`
|
||||
- 本机构建 API / Worker 镜像
|
||||
- 使用 `infra/docker/compose.yml` 启动 `postgres` / `redis` / `api` / `worker`
|
||||
- 部署后用 `/api/v1/health` 做健康校验
|
||||
- 使用 `infra/docker/infra.yml` 保持 Postgres / Redis 基础设施服务
|
||||
- 使用 `infra/docker/compose.yml` 构建并启动 API / Worker / Web
|
||||
- 部署后用 `/health` 做健康校验
|
||||
|
||||
---
|
||||
|
||||
@@ -46,6 +47,37 @@
|
||||
|
||||
---
|
||||
|
||||
## CI 预构建镜像
|
||||
|
||||
### 镜像名称
|
||||
```bash
|
||||
xiaoxia-ci-python:3.12
|
||||
```
|
||||
|
||||
### 构建脚本
|
||||
```bash
|
||||
infra/scripts/build-ci-image.sh
|
||||
```
|
||||
|
||||
### 构建方式
|
||||
在 Gitea Runner 所在服务器执行:
|
||||
```bash
|
||||
cd /var/lib/xiaoxia-saas-staging/repo
|
||||
bash infra/scripts/build-ci-image.sh
|
||||
```
|
||||
|
||||
### 维护原则
|
||||
- 修改 `requirements*.txt` 后,如 CI 依赖发生变化,必须重新构建 `xiaoxia-ci-python:3.12`
|
||||
- `.gitea/workflows/ci-cd.yml` 是真实 Gitea Runner 使用的 CI 源
|
||||
- `.github/workflows/ci-cd.yml` 必须保持同步,防止双平台工作流漂移
|
||||
- 不要在每次 CI 里重新 `pip install` 全量依赖;网络慢的问题应在镜像构建阶段集中处理
|
||||
|
||||
### 已验证效果
|
||||
- 旧问题:服务器到 PyPI 下载慢,CI 依赖安装可拖到 20+ 分钟
|
||||
- 新结果:Gitea Runner `task 534` 使用 `xiaoxia-ci-python:3.12`,CI 校验阶段约 57 秒完成
|
||||
|
||||
---
|
||||
|
||||
## 本地验证
|
||||
|
||||
推送前建议先跑:
|
||||
@@ -71,23 +103,33 @@ mypy packages/ apps/ --ignore-missing-imports
|
||||
## 当前已验证结论
|
||||
|
||||
- Gitea Actions 已启用
|
||||
- staging 可手工部署并已完成真实业务闭环验证
|
||||
- 当前 CI/CD 的关键目标是让 Gitea push 后自动完成同机部署,而不是只保留占位 YAML
|
||||
- Gitea Runner 已运行并通过真实任务验证
|
||||
- staging 已完成自动部署闭环验证
|
||||
- 真实业务 P1 smoke flow 已通过:注册、登录、项目、素材库、上传、生成任务、成片结果
|
||||
- CI 已使用预构建 Python validation image,避免每次运行重新从 PyPI 安装依赖
|
||||
- 当前公网健康检查地址是 `/health`
|
||||
- 非 tag push 下 production job 按 `refs/tags/v*` 规则正常跳过
|
||||
|
||||
## 当前已确认风险
|
||||
## 当前注意事项
|
||||
|
||||
- 现有文档曾把“`act_runner` 已注册并持续运行”写成既成事实
|
||||
- 但当前机器排查结果表明,runner 基础设施缺少可观测、可管理、可验证的正式落地形态
|
||||
- 仓库中的多处路径约定又指向 `xiaoxia-server:/var/lib/xiaoxia-ci`,说明 CI 基础设施的真实宿主边界尚未在文档中说明白
|
||||
- 在 runner 被正式纳管前,不能再把“runner 已持续运行”当作默认前提
|
||||
- 统一按 `docs/RUNNER-INFRASTRUCTURE.md` 建立 runner 安装目录、配置路径、日志路径、启动方式与健康检查脚本
|
||||
- `xiaoxia-ci-python:3.12` 是服务器本地 Docker 镜像;更换 runner 主机或清理镜像后,必须先执行 `infra/scripts/build-ci-image.sh`
|
||||
- worker.generate_video 当前是最小生产安全基线,会生成 generated://... 结果;真实 FFmpeg 成片生成仍是后续业务专项
|
||||
- 生产部署只应通过 `v*` tag 触发,普通 `develop` / `main` push 不应触发 production
|
||||
- 统一按 `docs/RUNNER-INFRASTRUCTURE.md` 管理 runner 安装目录、配置路径、日志路径、启动方式与健康检查脚本
|
||||
|
||||
---
|
||||
|
||||
## 故障排查
|
||||
|
||||
### Actions 触发了但 checkout 失败
|
||||
优先检查 runner 能否从 job 容器访问 Gitea 实例地址;如果 Gitea 挂在 `/git` 这类子路径下,优先使用手写 `git fetch`,不要依赖 `actions/checkout` 自动拼接仓库地址。
|
||||
优先检查 runner 能否从 job 容器访问 Gitea 实例地址;如果 job 镜像缺少 `git`,可使用 Python/`wget` 下载 Gitea archive 并解压,避免为了 checkout 单独安装 git。
|
||||
|
||||
### CI 又开始变慢
|
||||
优先检查:
|
||||
- job 是否仍使用 `container: xiaoxia-ci-python:3.12`
|
||||
- runner 主机是否存在该本地镜像:`docker image inspect xiaoxia-ci-python:3.12`
|
||||
- workflow 是否重新引入了每次运行的全量 `pip install`
|
||||
- 依赖变更后是否忘记重建 CI 镜像
|
||||
|
||||
### Deploy 成功但业务链不通
|
||||
优先检查:
|
||||
@@ -106,5 +148,5 @@ docker compose logs worker --tail=200
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2026-06-15
|
||||
**状态**: CI/CD 已接入真实主机部署模型,待 push 后持续验证稳定性
|
||||
**最后更新**: 2026-06-20 21:35 GMT+8
|
||||
**状态**: CI/CD 已完成真实 runner、staging 部署、P1 smoke、预构建 CI 镜像闭环验证
|
||||
|
||||
+44
-15
@@ -1,8 +1,8 @@
|
||||
# PHASE7-PROGRESS.md
|
||||
|
||||
**Phase**: Phase 7 - 核心视频剪辑业务
|
||||
**状态**: ✅ 已完成
|
||||
**最后更新**: 2026-06-19 09:50 GMT+8
|
||||
**Phase**: Phase 7 - 核心视频剪辑业务
|
||||
**状态**: ✅ 已完成(P0/P1/CI-CD 已生产验证闭环)
|
||||
**最后更新**: 2026-06-20 21:35 GMT+8
|
||||
|
||||
---
|
||||
|
||||
@@ -30,8 +30,10 @@
|
||||
- [x] 完整工业化开发体系文档已建立
|
||||
- [x] 8 Agent 角色体系已定义
|
||||
- [x] Git 工作流规范已确定并执行
|
||||
- [x] Gitea Runner 已运行
|
||||
- [x] Gitea Runner 已运行并通过真实任务验证
|
||||
- [x] CI/CD 流水线已稳定(`.gitea/workflows/ci-cd.yml`)
|
||||
- [x] Staging 自动部署已验证成功
|
||||
- [x] Production tag 发布门禁已验证为非 tag 正常跳过
|
||||
- [x] 开发环境防跑偏收敛方案已建立
|
||||
- [x] 启动链文档已修正到新标准
|
||||
|
||||
@@ -51,10 +53,37 @@
|
||||
- [x] `tests/integration/test_generation_pipeline.py` 通过
|
||||
- [x] 前端 `type-check` 通过
|
||||
- [x] 前端 `build` 通过
|
||||
- [x] 真实 P1 smoke flow 通过:注册、登录、项目、素材库、上传、生成任务、成片结果
|
||||
- [x] 公网 `/health` 返回 200,服务版本 `0.1.0`
|
||||
|
||||
---
|
||||
|
||||
## 三、遗留后续专项
|
||||
## 三、生产验证闭环(2026-06-20)
|
||||
|
||||
### 1. P0 部署链路
|
||||
- [x] split infrastructure 部署脚本已收口:`infra.yml` 管 Postgres/Redis,`compose.yml` 管 API/Worker/Web
|
||||
- [x] `bugfix/deploy-split-infra-ci` 已合并到 `develop`
|
||||
- [x] Staging 自动部署验证成功:Gitea Runner `task 528`、`task 532`、`task 535`
|
||||
- [x] 非 tag push 下 Production 部署按规则跳过:`task 529`、`task 533`、`task 536`
|
||||
- [x] 当前公网健康地址为 `/health`,`/api/v1/health` 返回 404 属于预期
|
||||
|
||||
### 2. P1 业务主链路
|
||||
- [x] 修复 worker 未注册 `worker.generate_video` 导致生成任务卡在 `pending` 的问题
|
||||
- [x] `bugfix/worker-generate-video-task` 已合并到 `develop`
|
||||
- [x] 当前 `worker.generate_video` 为最小生产安全基线:消费任务、标记完成、创建 `GeneratedVideo`、返回 `generated://...` 结果
|
||||
- [x] 真实 P1 smoke flow 已验证 `GenerationTask` 到 `completed`,`progress=100.0`,`result_count=1`
|
||||
|
||||
### 3. CI 根治优化
|
||||
- [x] 诊断出 CI 慢根因:服务器到 PyPI 下载慢,`mypy==2.1.0` 大 wheel 造成 20+ 分钟等待
|
||||
- [x] 新增预构建校验镜像 `xiaoxia-ci-python:3.12`
|
||||
- [x] `.gitea/workflows/ci-cd.yml` 与 `.github/workflows/ci-cd.yml` 已同步使用预构建镜像
|
||||
- [x] `chore/ci-prebuilt-python-image` 已合并到 `develop`,merge commit `ba06c95`
|
||||
- [x] Gitea Runner `task 534` 已在真实 CI 环境验证使用 `xiaoxia-ci-python:3.12`
|
||||
- [x] CI 校验阶段从 20+ 分钟降到约 57 秒
|
||||
|
||||
---
|
||||
|
||||
## 四、遗留后续专项
|
||||
|
||||
以下问题不阻塞 Phase 7 完成,已纳入后续专项治理清单:
|
||||
|
||||
@@ -68,7 +97,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 四、执行策略总结
|
||||
## 五、执行策略总结
|
||||
|
||||
Phase 7 执行过程中的关键决策:
|
||||
|
||||
@@ -79,27 +108,27 @@ Phase 7 执行过程中的关键决策:
|
||||
|
||||
---
|
||||
|
||||
## 五、验证清单
|
||||
## 六、验证清单
|
||||
|
||||
如果新会话启动后问:
|
||||
|
||||
1. **当前 Phase 是什么?**
|
||||
1. **当前 Phase 是什么?**
|
||||
- 答:Phase 7 已完成 ✅
|
||||
|
||||
2. **Phase 7 交付了什么?**
|
||||
2. **Phase 7 交付了什么?**
|
||||
- 答:核心视频剪辑主链路(上传→分类→生成→下载),CI/CD 稳定性修复,代码 TODO 清理
|
||||
|
||||
3. **下一步做什么?**
|
||||
- 答:规划 Phase 8 或启动下一个专项(参考 `docs/SaaS-后续专项整治清单-2026-06-18.md`)
|
||||
3. **下一步做什么?**
|
||||
- 答:优先进入真实 FFmpeg 生成专项,把当前 `generated://...` 最小基线升级为可下载真成片;或启动后续专项治理(参考 `docs/SaaS-后续专项整治清单-2026-06-18.md`)
|
||||
|
||||
4. **当前进度文档路径是什么?**
|
||||
4. **当前进度文档路径是什么?**
|
||||
- 答:`F:\openclaw-saas\docs\PHASE7-PROGRESS.md`
|
||||
|
||||
---
|
||||
|
||||
## 六、完成总结
|
||||
## 七、完成总结
|
||||
|
||||
**Phase 7 已全部完成**,核心视频剪辑业务主链路已打通并验证通过。
|
||||
**Phase 7 已全部完成**,核心视频剪辑业务主链路、P0 部署链路、P1 真实 smoke flow、CI/CD 自动化主链路均已打通并验证通过。
|
||||
|
||||
### 关键成果
|
||||
- SaaS MVP 核心功能可用
|
||||
@@ -113,4 +142,4 @@ Phase 7 执行过程中的关键决策:
|
||||
- 基础设施:SQLAlchemy 持久化、Celery worker、MinIO 存储、预签名 URL
|
||||
- 前端:React + TypeScript,生成页和结果页联调完成
|
||||
|
||||
**Phase 7 正式收口,可以进入下一阶段规划。** ✅
|
||||
**Phase 7 正式收口,可以进入真实 FFmpeg 生成专项或下一阶段规划。** ✅
|
||||
|
||||
Reference in New Issue
Block a user