首页/开发/CI/CD 与发布速查/流水线即代码(Pipeline as Code)
流水线设计54 条

流水线即代码(Pipeline as Code)

把流水线定义写成仓库里的版本化文件(.gitlab-ci.yml / workflow yaml / Jenkinsfile),随代码评审、回滚与审计。

CI/CD 与发布速查开发更新于 2026-10-13

流水线即代码是什么

把流水线定义写成仓库里的版本化文件(.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 评审,限制直接向主干推送。
部分平台在界面里临时改配置适合救急,但要尽快回写到仓库,否则下次从仓库读取时改动会丢失。
机密不要写进流水线文件:用平台的受保护变量或密钥管理注入,文件里只留变量引用。

易错点

  • 在界面里手工配置流水线:无法评审与回放,迁移环境时全部重配,配置成为孤本。
  • 流水线定义无评审直推主干:等同于让任何人无审计地在构建机执行代码,应限制直推。
  • 密钥明文写进流水线文件:仓库、分支与 fork 都是泄露面,应改用受保护变量或密钥注入。
  • 各项目复制粘贴同一套配置:逻辑漂移、修一处要改多处,应抽取共享模板统一维护。
  • 工具镜像或动作引用浮动版本:构建行为随时间漂移,修复与升级都要显式锁版本并纳入评审。

数据来源与参考

  • GitLab Docs《Pipeline architecture》
  • Jenkins Handbook《Using a Jenkinsfile》
  • GitHub Docs《Workflow syntax for GitHub Actions》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌