CI/CD 指南
用途
本技能是 NeMo-RL 的 CI/CD 参考,覆盖 GitHub Actions 流水线结构、通过 /ok to test 触发 CI,以及 CI 失败排查。
CI 如何工作
NeMo-RL CI 运行在 GitHub Actions 上,工作流位于 .github/workflows/。
主测试工作流在推送到 pull-request/<number> 分支时触发。这些分支由 copy-pr-bot 在贡献者推送到其 fork 且 PR 收到信任信号后自动创建:
- 提交由维护者 GPG 签名,或
- 维护者以 PR 评论形式发布
/ok to test <full-sha>。
触发 CI
向 PR 推送新提交后,用以下方式触发 CI:
/ok to test <full-commit-sha>
使用 git rev-parse HEAD(而非短格式)获取完整 SHA。
新提交后重新触发:每个
/ok to test <sha>都针对该特定 SHA。推送额外提交后,需用更新后的 SHA 发布新评论。
CI 标签
每个 PR 必须有且仅有一个 CI:* 标签——在附加标签前,质量检查任务会一直保持红色。标签控制运行哪个测试层级以及是否构建新的容器镜像。
| 标签 | 运行内容 | 容器 |
|---|---|---|
CI:docs |
仅文档测试 | 复用主容器(指向发布分支如 r0.8.0 的 PR 复用该分支的容器,与 CI:Lfast 相同) |
CI:Lfast |
快速测试子集 | 复用主容器(指向发布分支如 r0.8.0 的 PR 复用该分支的容器,仅由合并后对该分支的推送发布) |
CI:L0 |
单元测试 + 文档 + lint | 构建新镜像 |
CI:L1 |
L0 + 功能测试 | 构建新镜像 |
CI:L2 |
L1 + 收敛测试 | 构建新镜像 |
Skip CICD |
不运行(跳过所有测试) | — |
merge group / 推送到 main 时的默认值:L1。
打开 PR 时应附加哪个标签:
| 变更路径 / 变更性质 | 标签 |
|---|---|
仅文档(docs/、*.md、docstrings) |
CI:docs |
| 琐碎修复,无逻辑变更 | CI:Lfast |
| 新代码、缺陷修复、重构 | CI:L0 |
| 可能影响模型行为的变更 | CI:L1 |
| 可能影响收敛的变更 | CI:L2 |
CI 失败排查
# 列出 PR 的近期工作流运行
gh run list --repo NVIDIA-NeMo/RL --branch "pull-request/<pr-number>"
# 查看失败运行的摘要
gh run view <run-id> --repo NVIDIA-NeMo/RL
# 流式查看失败任务的输出
gh run view <run-id> --repo NVIDIA-NeMo/RL --log-failed
常见失败模式:
| 症状 | 可能原因 | 修复 |
|---|---|---|
| CI 从不启动 | 无信任信号或 copy-pr-bot 未触发 | 发布 /ok to test <sha> |
semantic-pull-request 失败 |
PR 标题不符合 Conventional Commits | 修改 PR 标题;见 contributing 技能 |
| Linting 失败 | 风格违规 | 运行 uv run ruff check --fix . && uv run ruff format . |
| 单元测试失败 | 代码回归或缺少依赖 | 本地复现;见 testing 技能 |