2. 常见CI/CD工具概览

聊到CI/CD工具,市面上选项太多了。我用过的不下七八种,每种都有自己的脾气。说白了,没有万能工具,只有适不适合你团队场景的那个。

下面这张图,是我自己总结的工具对比维度。先有个整体印象,我们再一个一个掰开聊。

常见CI/CD工具对比维度图 Jenkins GitLab CI GitHub Actions CircleCI Travis CI 生态集成度 → 配置灵活度 ↑ 说明: 节点位置越高代表配置灵活度越强,越靠右代表第三方生态集成越丰富。实际选型还要看团队运维能力。

2.1 Jenkins —— 老牌王者,但有点重

Jenkins,圈内人都叫它“詹师傅”。它出道早,插件生态极其庞大。我个人习惯用Jenkins处理那些需要高度定制的场景,比如跨多云部署、需要对接老旧系统的流水线。

优点:

  • 插件超2000种,几乎什么都能接
  • Pipeline as Code 用 Groovy 写,非常灵活
  • 自托管,数据不出网,安全可控
  • 社区活跃,遇到问题大多能搜到

缺点:

  • 安装配置繁琐,插件多了经常版本冲突
  • 界面颜值一般,用户体验偏老式
  • Master节点单点故障风险,需要额外做高可用
  • 维护成本高,需要专门的运维去“服侍”它
避坑: 我曾经接手过一个 Jenkins 实例,里面积压了60多个插件从不更新。一到构建高峰就 OOM。后来我强制规定了插件版本锁定和定期清理制度,才稳下来。

2.2 GitLab CI —— 跟代码仓库绑死的全家桶

如果你团队已经在用 GitLab,那 GitLab CI 就是天然选择。我在项目中遇到过单仓库多模块的痛点,GitLab CI 的父子流水线正好能解。

优点:

  • 与 GitLab 仓库深度集成,MR触发流水线非常顺滑
  • 配置用 YAML,学习成本低
  • 自带 Runner 管理,可以自托管也能用 SaaS
  • 内置容器镜像仓库

缺点:

  • 只认 GitLab,换个平台就得重写配置
  • 免费版功能受限(比如仅有一条 CI/CD 队列)
  • 复杂编排能力不如 Jenkins
小技巧: 如果你用 GitLab CI,建议将 .gitlab-ci.yml 拆成 include 模块,不然文件长了很难维护。

2.3 GitHub Actions —— 开源社区的福音

GitHub Actions 近几年势头很猛。我记得刚发布时,整个行业都比较兴奋。说白了,它让 CI/CD 配置变成了一堆可复用的 action 拼装。

优点:

  • Marketplace 里 action 丰富,拿来就用
  • 配置基于 YAML,语法直观
  • 免费额度对开源项目非常友好
  • 触发方式多样:push、PR、issue、schedule 等

缺点:

  • 只支持 GitHub 仓库,不能用于 GitLab / Bitbucket
  • 自托管 Runner 需要额外精力维护
  • 调试时日志输出不够清爽,排查问题有点烦

举个例子,一个简单的 Go 测试工作流:

name: Go Test
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.22'
      - run: go test ./...

2.4 CircleCI —— 快,但藏着点贵

CircleCI 的执行速度在同类中出名。我记得有一次并行跑测试,CircleCI 的智能缓存帮我节省了将近40%的构建时间。不过,爽完一看账单就清醒了。

优点:

  • 构建速度快,并行能力强
  • 缓存机制成熟,能显著减少重复下载
  • 支持 SSH 直连调试,排错方便
  • 原生支持 Docker 和机器执行器

缺点:

  • 免费额度很少,超过限额收费较高
  • 配置语法有点特殊,Orb 虽然好但有一定学习成本
  • 数据不出境?除非你买 Server 版,但价格感人

2.5 Travis CI —— 老牌 SaaS,但逐渐边缘化

Travis CI 在 GitHub 生态早期是主流。我曾经维护过一个开源项目,Travis CI 用了好几年,后来才切到 GitHub Actions。不是它不好,而是时代变了。

优点:

  • 配置简单,示例丰富
  • 与 GitHub 集成顺畅

缺点:

  • 免费额度越来越紧,构建排队时间长
  • 功能更新慢,已被 GitHub Actions 碾压
  • 企业级支持偏弱

2.6 工具横向对比总表

下面这张表,我把五个工具的核心差异拉出来。你想想看你的团队最在意什么,对照着选。

维度 Jenkins GitLab CI GitHub Actions CircleCI Travis CI
部署成本 高(需运维) 中(自带Runner) 低(SaaS为主) 中(SaaS/自托管) 低(全SaaS)
配置语法 Groovy(陡峭) YAML(中等) YAML(简单) YAML(中等) YAML(简单)
生态扩展 极强(2000+插件) 强(内置 + CI/CD) 强(Marketplace) 中(Orb) 弱(社区脚本为主)
托管场景 自托管为主 自托管 / SaaS SaaS为主 自托管 / SaaS 纯SaaS
构建速度 取决于硬件 中等 快(并行能力强) 极快(缓存优化) 慢(排队严重)
适合团队 大型企业、高定制 GitLab用户、中型团队 开源项目、小型团队 重视速度、愿意付费 个人或小项目

2.7 核心选择建议

是不是觉得有点眼花缭乱了?我建议团队在选型时,先回答三个问题:

  1. 你们用哪个代码平台? GitLab 选 GitLab CI,GitHub 选 Actions,闭坑 Jenkins 也能上。
  2. 团队有没有专职运维? 有,可以考虑 Jenkins 或自托管 Runner;没有,优先 SaaS 产品。
  3. 对构建速度有硬性要求不? 有,CircleCI 或 GitHub Actions 的并行策略值得投资。
再啰嗦一句: 不要把工具选型当成技术炫技。我见过团队硬上 Jenkins,最后半年没人能维护。工具是服务业务的,不是反过来。

好,这一章我们先铺垫到这里。心里有这五张牌,后面讲具体管道搭建时,你会觉得顺很多。