每个 PR 自动跑必要检查,避免某次合并把主分支跑挂;回归在合并前就被拦下。
CI 把每次提交变成一条自动流水线
持续集成(CI)在你 push 或发 PR 时自动跑一串 stage——装依赖、Lint、测试、构建。任一 stage 失败就熔断(红灯、阻止合并),全绿才放行。下面选一种提交类型,点「触发流水线」逐步推进,看健康的提交怎么全绿、带回归的提交怎么在测试 stage 红灯熔断。
CI 流水线 · 装依赖 → Lint → 测试 → 构建○ 待触发
提交类型
PR #104 · feat/login-retry → main运行 #—
○ 等待 push 触发
- 装依赖
npm ci待运行 - Lint
npm run lint待运行 - 测试
npm test待运行 - 构建
npm run build待运行
尚未触发。原因:CI 只在你 push 或发 PR 时才跑,不会一直占算力。下一步:选一种提交类型,点「触发流水线」模拟 push。对照:健康的提交会四个 stage 全绿放行;带回归的提交会在测试 stage 红灯,构建被跳过。
知识点总结
把流水线模拟器里能直接看到的东西命名下来。
- stage 编排:装依赖 → Lint → 测试 → 构建是按顺序跑的独立步骤,每步有退出码和日志。
- push / PR 触发:CI 不是常驻服务,而是仓库收到 push 或 PR 时才启动;「触发流水线」就是在模拟这次 push。
- 全绿才放行:所有必要 stage 退出 0,PR 才允许合并——把「合并前才手工测」变成「每次提交都自动验证」。
- 失败即熔断:一个 stage 退出非 0,后续 stage 直接跳过(不浪费构建算力),PR 红灯阻止合并。
- 反馈循环:失败的 stage 展开 stderr(断言、行号),照着修代码后重跑,转绿再合并。
什么时候靠 CI 把关
从「不靠 CI 会发生什么」判断。
曾经修过的故障写成测试进入 CI,后续改动若让它复活,红灯立刻报警。
把「合并前手动点一遍」变成可复现的 stage,省人力也省遗漏。
不适用:纯个人草稿、还没有测试和构建命令的项目——先有可跑的检查,CI 才有意义;否则只是空跑流水线。
怎么用
从「PR 推上去到看到结果」的最短路径。
- 写好可跑的检查:npm ci、npm run lint、npm test、npm run build 本地能跑通,是 CI 的输入。
- 在仓库配置 workflow:GitHub Actions / GitLab CI 写一个 yaml,声明 stage、触发条件(push / PR)和所需环境。
- 把必要检查设为 required:在分支保护里勾选,使 CI 失败时 PR 真的不能合并。
- 读 PR 上的状态:看哪个 stage 绿 / 红,红灯点开看日志和行号。
- 修代码后重跑:照 stderr 改完推送,CI 自动重跑,转绿后再合并。
正反例:CI 是不是真的门禁
目标都是「不让坏代码进主分支」,只改一个关键选择——CI 失败到底挡不挡得住合并。
分支保护把「测试」「构建」设为必要检查;任一红灯 PR 就不能合并,作者必须修好转绿。回归被拦在合并前。
CI 配了但不是 required,红灯也能点合并;回归照样进主分支,CI 沦为装饰,还白白浪费算力。
快速自测
一个 PR 的 CI 跑到测试 stage 失败、构建 stage 显示「已跳过」。这时 PR 能不能合并?为什么跳过构建?
继续查证
术语的技术定义和行为以这些一手或权威资料为准。
下一步学
和本知识点经常一起出现的概念。