Files
xiaoxia-saas/docs/CI-CD-稳定性修复专项规划-草案.md

229 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CI/CD 稳定性修复专项规划(草案)
**文档状态**:草案
**创建时间**2026-06-19
**适用范围**:小虾 SaaS 仓库 CI/CD 专项治理
**专项性质**:独立专项,**不得混入 Phase 7 业务收尾提交**
---
## 一、专项背景
`feature/phase7-asset-generation-alignment` 分支推进 Phase 7 业务收尾过程中,提交 `e5d5ae4` 对应的 `ci-cd.yml #239` 最终失败。
已确认:
- 失败点位于 `Code Quality Check`
- 当前判断更偏向 CI/CD 环境 / 开发依赖工具链可执行性异常
- 暂未定性为本轮 Phase 7 业务代码主链缺陷
根据当前已确认的流程约束:
- 本轮业务收尾**只记录问题**
- **不得边做边改 CI/CD**
- CI/CD 修复必须进入下一次**单独规划、单独执行**的专项
本文件即用于承接该专项。
---
## 二、专项目标
把当前 CI/CD 从“曾经可跑通,但不稳定”收敛为:
1. `Code Quality Check` 稳定可执行
2. `Run Tests` 稳定可执行
3. `Build Summary` 触发逻辑符合预期
4. `.gitea` / `.github` workflow 不再漂移
5. feature 分支提交结果可被稳定信任
6. CI 真正成为交付门禁,而不是偶尔成功的脚本
---
## 三、专项边界
### 只做这些
- CI workflow 执行链路检查
- 开发依赖安装链路检查
- 容器 / `venv` / 工具调用方式一致性检查
- `.gitea``.github` workflow 同步关系核查
- 质量检查工具(如 `black` / `isort` / `flake8` / `mypy` / `bandit`)可执行性验证
- 与 CI/CD 直接相关的文档修订
### 不做这些
- 不处理 Phase 7 新业务功能
- 不处理生成链深化
- 不处理前端新页面开发
- 不顺手清理无关历史代码债
- 不把 README、测试、架构等非 CI 主问题混成一个大杂烩专项
---
## 四、当前已知问题
### 问题 0:runner 基础设施缺少正式纳管
当前已确认:
- workflow 可以触发
- run 可以入队
- job 可长期停留在 `Waiting to run`
- 文档里虽然声明 `act_runner` 已注册并持续运行,但当前机器上缺少清晰可验证的 runner 安装位置、配置文件、日志路径和健康检查方式
- 进一步交叉核对后,现有仓库内多处路径约定实际指向 `xiaoxia-server:/var/lib/xiaoxia-ci`,这意味着 CI 基础设施的真实宿主很可能是服务器侧,而不是当前本机
这说明当前问题不仅是 workflow 稳定性问题,更是 CI 执行基础设施没有正式闭环、且宿主边界未被文档明确说明的问题。
### 问题 1:最新提交 `#239` 在质量检查阶段失败
- 提交:`e5d5ae4`
- run`ci-cd.yml #239`
- 结果:`failure`
- 失败阶段:`Code Quality Check`
### 问题 2:CI 工具链可执行性存在疑点
当前症状表明:
- `requirements-dev.txt` 虽已建立
- 但质量工具链在 CI 环境中未必稳定成为可执行命令
- “本地通过”与“CI 稳定通过”之间仍存在断层
### 问题 3:CI 真源与镜像副本虽已统一,但仍需持续核查
根据环境收敛规则:
- `.gitea/workflows/ci-cd.yml` 是真源
- `.github/workflows/ci-cd.yml` 是镜像/兼容副本
专项中必须再次验证两者当前是否完全一致,避免后续再次漂移。
---
## 五、专项执行原则
1. **文档先行**
- 先明确问题清单、修复方案、验证口径,再动配置。
2. **最小必要改动**
- 只改和 CI/CD 稳定性直接相关的内容。
3. **不混业务提交**
- 所有 CI 专项修复在独立分支完成。
4. **先复现再修**
- 先找出稳定复现条件,禁止凭猜测叠补丁。
5. **一次只修一个链路问题**
- 避免把依赖、容器、workflow、文档同时大改导致新漂移。
6. **修复后必须验证**
- 不能只看本地命令通过,必须看 feature 分支 CI 结果。
---
## 六、建议执行步骤
### Step 1:问题复盘
输出一份问题复盘清单,至少回答:
- `#239` 失败时实际执行到了哪一步?
- 哪个命令或哪个工具最先不可用?
- 本地与 CI 的差异点有哪些?
- 是安装问题、PATH 问题、容器问题,还是 workflow 写法问题?
### Step 2:环境链路核查
逐项核查:
- `requirements-dev.txt`
- `.gitea/workflows/ci-cd.yml`
- `.github/workflows/ci-cd.yml`
- `container: catthehacker/ubuntu:act-latest`
- `python3 -m venv .venv`
- `python -m pip install --index-url https://pypi.org/simple -r requirements-dev.txt`
- 质量工具调用方式
### Step 3:形成修复方案
修复方案必须明确:
- 改哪些文件
- 为什么改
- 改完如何验证
- 是否会影响现有分支保护与门禁规则
### Step 4:在独立分支执行修复
建议分支命名:
- `bugfix/ci-quality-check-stability`
-`refactor/ci-toolchain-alignment`
### Step 4.5runner 基础设施正式纳管
在继续追单次 workflow 结果之前,必须先完成:
- 固定 runner 安装目录
- 固定 runner 配置文件路径
- 固定 runner 日志目录
- 固定 runner 启停脚本
- 固定 runner 健康检查脚本
- 文档与现实一致性校验
参考文档:
- `docs/RUNNER-INFRASTRUCTURE.md`
- `scripts/ci/check-runner.ps1`
- `scripts/ci/install-runner.ps1`
- `scripts/ci/start-runner.ps1`
- `scripts/ci/stop-runner.ps1`
### Step 5:专项验证
至少验证:
- `Code Quality Check`
- `Run Tests`
- `Build Summary`
- `.gitea` / `.github` 一致性
- feature 分支提交完整 run 结果
### Step 6:文档回写
专项结束后必须更新:
- `PHASE7-PROGRESS.md`(只记录状态变化)
- 专项文档本身
- 如有必要,再更新环境收敛方案文档
---
## 七、验收标准
本专项完成的标准不是“我觉得差不多行了”,而是以下条件成立:
- [ ] `Code Quality Check` 稳定通过
- [ ] `Run Tests` 稳定通过
- [ ] `Build Summary` 按规则正常执行
- [ ] `.gitea` / `.github` workflow 保持一致
- [ ] feature 分支同类提交不再复现“本地过、CI 挂”
- [ ] 本专项过程和结果已文档化
---
## 八、风险提醒
### 风险 1:顺手扩大范围
最容易犯的错误是:修 CI 时顺手改业务代码、测试、文档、依赖策略,最后变成一锅粥。
### 风险 2:局部成功误判为稳定成功
一次通过不代表已经稳定;必须至少经过一轮 feature 分支真实验证。
### 风险 3:修完未回写文档
如果修完不更新文档,就会再次回到“规则和现实分离”的老问题。
---
## 九、建议优先级
**优先级:P0**
原因:
- 它是当前最明确的交付阻塞点
- 它会放大所有后续专项的执行成本
- 它直接影响质量门禁是否真实有效
---
## 十、专项结论
当前建议非常明确:
**CI/CD 稳定性修复专项应该作为下一轮最优先启动的独立专项。**
不是因为它最有趣,
而是因为它最影响整个项目后续的推进质量和交付效率。
---
**建议人**:小虾 🦐