流水线即代码是什么
把流水线定义写成仓库里的版本化文件(.gitlab-ci.yml、GitHub Actions 的 workflow yaml、Jenkinsfile),与代码一起评审、变更、回滚与审计。背景:早期 CI 在 Web 界面点选配置,无法评审、迁移与复用;流水线即代码把配置对象化、可 diff,也让重建环境的成本大幅下降。注意权限面:能改动流水线文件的人实际上能在构建机上执行代码,流水线文件本身是高权限资产,应按与生产权限同等的标准管理。
基本信息
| 代表文件 | .gitlab-ci.yml、.github/workflows 下的 yml、Jenkinsfile |
|---|---|
| 好处 | 变更可评审、可追溯、可回滚,环境重建成本低 |
| 权限注意 | 能改流水线文件的人就能在构建机上执行代码 |
| 配套实践 | CODEOWNERS 评审、保护分支、限制直推主干 |
| 评审重点 | 新增凭据引用、外发请求与部署权限的变更要重点看 |
典型使用场景
- 多环境重建:平台迁移或灾难恢复时,仓库里的定义直接重放,不用回忆界面里的勾选项。
- 变更审计:谁在什么时候改了哪条发布逻辑,git 历史里可查。
- 分支试验:在新分支试用新的流水线结构,验证后再合并,不影响主干交付节奏。
- 复用与模板:把公共步骤抽象成模板或共享库(各平台有 include、可复用工作流、共享库等机制),减少重复粘贴。
- 同级别评审:影响发布行为的改动走与代码同等的评审流程。
- 提交前自检:部分平台提供配置 lint 或本地执行工具,先发现问题再推送。
- 事故复盘:对照流水线定义的变更历史,定位问题是什么时候引入的。
Jenkinsfile 片段
Jenkinsfile 片段
pipeline {
agent any
stages {
stage('Build') {
steps { sh 'make build' } # 构建逻辑写在仓库里
}
stage('Test') {
steps { sh 'make test' } # 与代码一起评审
}
}
}流水线文件是高权限入口:建议纳入 CODEOWNERS 评审,限制直接向主干推送。
部分平台在界面里临时改配置适合救急,但要尽快回写到仓库,否则下次从仓库读取时改动会丢失。
机密不要写进流水线文件:用平台的受保护变量或密钥管理注入,文件里只留变量引用。