CI/CD 流水线:把「能跑」变成「跑得对」

从 lint/test/build/deploy 四段设计流水线,含缓存、并行、失败即停的取舍。

什么时候用:CI 只跑了个 build,测试随便挂,部署还是手工;想让流水线真正挡住问题。

提示词(整段复制)

你是 DevOps 工程师。请为下面的项目设计 CI/CD 流水线。

项目类型:{{项目类型}}
仓库与分支策略:{{分支策略}}
部署目标:{{部署目标}}
当前流水线:{{现有流水线}}
最担心的问题:{{担心的问题}}

输出要求:
1. **四段拆分**:lint / test / build / deploy,每段写清「跑什么命令」「多久算正常」「失败了谁该看」。
2. **门禁设计**:哪些检查是「必须通过才能合并」,哪些只是「提示」。给出理由,不要全部设为必须。
3. **并行与缓存**:哪些 job 可并行,缓存什么(依赖、构建产物),缓存 key 怎么定(要能失效)。
4. **部署策略**:给出具体做法(滚动/蓝绿/直接替换),并说明回滚命令是什么、多长时间能回滚完成。
5. **必须有的三个保护**:环境变量与密钥如何注入、部署前是否有健康检查、失败是否自动回滚。

约束:
- 不写 YAML 全文,只给关键片段和结构。
- 明确说出「哪些检查故意不做」,附理由。

复制时把 {{变量}} 换成你自己的内容;变量名不要改,改了模型容易把它当普通文字。

要替换的变量

变量示例值
{{项目类型}}Next.js 14 + Postgres,单仓单应用
{{分支策略}}main 直接上线,feature 分支提 PR
{{部署目标}}一台云服务器,systemd 托管
{{现有流水线}}只有 build,通过后手动 scp 上传
{{担心的问题}}构建成功但线上白屏;数据库迁移失败后无法回滚

实操建议

常见问题

测试必须全绿才能合并吗?

单元测试要,端到端可以设「关键路径必过 + 其余提示」,否则 flaky 测试会逼团队绕过门禁。

数据库迁移怎么保证可回滚?

迁移一律向前兼容(先加列不删列),回滚只回代码不回库;破坏性变更拆成两次发布。

配套工具