# 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.5:runner 基础设施正式纳管 在继续追单次 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 稳定性修复专项应该作为下一轮最优先启动的独立专项。** 不是因为它最有趣, 而是因为它最影响整个项目后续的推进质量和交付效率。 --- **建议人**:小虾 🦐