主流工具一览
| 工具 | 模型 | 自托管 | 学习曲线 | 适合 |
|---|---|---|---|---|
| GitHub Actions | YAML / 共享 runner / self-hosted runner | 部分(runner) | 低 | 已用 GitHub 的项目 |
| GitLab CI | YAML / 自带 runner | 完整自托管 | 低 | 用 GitLab 的项目 |
| Jenkins | Pipeline (Groovy) / Plugin 生态 | 完整 | 高(插件多 + 老) | 老项目 / 强自定义 |
| Buildkite | YAML + agent 在自己机器 | Hybrid(控制平面在云) | 中 | 重度自托管但不想运维 controller |
| CircleCI | YAML / 云 + self-hosted | 部分 | 低 | 通用项目,独立工具 |
| Drone | YAML / docker 化 | 完整 | 低 | 轻量 / 自托管 |
| Tekton | K8s CRD | K8s 原生 | 中-高 | 已重度用 K8s |
| Argo Workflows | K8s CRD | K8s 原生 | 中 | 数据 / ML 流水线 |
Travis CI 和 Bamboo 在新项目里基本不见了。CircleCI 仍活跃但生态没 GHA 强。
怎么选:决策清单
1. 已有的代码托管在哪
- GitHub → 默认 GitHub Actions(PR 集成最深)
- GitLab → 默认 GitLab CI(一体,免费档强)
- Bitbucket → Bitbucket Pipelines / 自选
- 自托管 Gitea / Gogs → Gitea Actions / Drone
2. 是否必须自托管
- 数据合规 / 等保要求 → 必须自托管:GitLab CI / Jenkins / Drone / Tekton
- GitHub Actions 也支持自托管 runner(但 controller 在云上)
3. 是否已经重度用 K8s
- 是 → 考虑 Tekton / Argo Workflows(K8s 原生 CRD,统一管控平面)
- 否 → 用 K8s 原生 CI 是给自己加难度
4. 团队心智
- 团队偏好"低配置 + 共享 SaaS"→ GHA / CircleCI
- 团队有专门 DevOps 维护工具 → Jenkins / Buildkite 都行
- 没人愿意维护 → 不要 Jenkins
几个常被忽视的点
Job 矩阵
跑同一组测试在 N 种环境(语言版本 / OS):
# GitHub Actions
strategy:
matrix:
python: ["3.10", "3.11", "3.12"]
os: [ubuntu-latest, macos-latest]
矩阵跑得起来 = 工具基本够用。
可复用工作流(reusable workflow)
GHA 的 workflow_call、GitLab 的 include、Jenkins 的 shared library——都是把"建镜像 / 部署 / 通知 Slack"等通用步骤抽出来,避免每个仓库复制粘贴。
Self-hosted runner / agent
- 优点:访问内网资源、用大机器、敏感数据不出公司
- 代价:自己运维(安全补丁 / 容器逃逸 / 资源调度)
- 安全坑:永远不要让 self-hosted runner 跑公开仓库的 PR——攻击者可以 PR 任意代码到你机器上跑
计费模型
- GHA:公开仓库免费;私有按 runner 时间计费
- GitLab CI:CI minutes 套餐
- Jenkins:免费但要自己 host
- CircleCI / Buildkite:按 credit / 并发 job 计费
计费策略经常变——选型时去官网看当下定价,别信几年前的博客。
反模式
- 每个仓库一份独立的 90 行 yaml → 改成 reusable workflow + 共享 action
- CI 配置 commit 到 default 分支才生效 → 测试期间会污染 main
- 失败的 job 没有通知 → 加 Slack / Teams / 邮件
- CI 跑很慢但没人看时间 → 装 GitHub Actions Workflow Insights / GitLab CI Pipeline Stats
一个实操建议
新项目:
GitHub 仓库 → GitHub Actions(默认)
↓
后期加自托管 runner 跑大 build / 跨环境测试
↓
真有合规需求再考虑迁 GitLab Self-hosted
不要一开始就上 Jenkins——大多数团队不需要那个复杂度。
推荐阅读
- GitHub Actions Documentation
- GitLab CI/CD Documentation
- Jenkins Pipeline
- Tekton
- State of DevOps Report (DORA) — 工具选型对绩效的实际影响(spoiler:选什么不重要,怎么用最重要)
下一篇:GitOps——把"部署"也变成 git 操作。