下面分工具讲清特点、适合场景与落地要点,末尾附特性对比表。
一、Jenkins:可插拔服务器
Jenkins 是可插拔 CI 服务器,Pipeline 用 Jenkinsfile 描述阶段。Freestyle 适合简单任务,生产应用声明式 pipeline。Agent 标签把构建分到有 SDK 的节点,凭据用 Credentials 插件管理。
插件生态大但易过时,升级要测;共享库减少重复;Blue Ocean 已逐渐让位于原生 UI。与 Git 用 webhook 触发,避免轮询。安全上要关闭匿名读、给 agent 最小权限、不要在日志打密码;容器化 agent 比永久节点干净。和 GitLab / GitHub CI 比,Jenkins 更适合复杂企业内网与老构建机。别忘了备份 JENKINS_HOME。
什么时候用:需要高度自定义、运行在隔离企业内网、或要接管一堆老构建机的团队。
二、Travis CI:早期托管 CI
Travis CI 是早期流行的托管持续集成,用 .travis.yml 描述语言版本、安装脚本和测试命令,在 GitHub 推送后跑构建。它把矩阵构建(多个 JDK / Node 版本)做得比较早。现在很多项目迁到 GitHub Actions,但维护老仓库仍会碰到 Travis。
密钥用加密环境变量,不要写进仓库;构建要可在本地用同样命令复现;免费额度变化后,要确认组织是否还在计费计划里。YAML 里把 install 和 script 写清楚,依赖安装失败不要混进测试日志;缓存依赖目录以加快构建,但缓存坏了要能一键清。
容易踩的坑
- 密钥走加密变量,fork PR 默认不要暴露机密,防止恶意 PR 偷环境变量。
- 不要让 CI 成为唯一能编过的环境,本地要能用同样命令复现。
- 缓存依赖目录以加快构建,但缓存坏了要能一键清。
什么时候用:已有 Travis 配置且稳定的开源项目可以继续用;新项目优先 Actions 或其他现成流水线。迁移时先把同样的脚本搬过去,再删 Travis。
三、Drone CI:容器原生
Drone CI 是容器原生的持续集成系统,流水线用 .drone.yml 描述,每一步在隔离容器里运行。它和 Git 仓库紧密集成,支持 PR 门禁、密钥注入和多架构构建,部署形态可以是单机 docker 或 Kubernetes。相比 Jenkins,Drone 配置更声明式、状态更轻。
落地时要把缓存卷、私有镜像仓库和密钥管理想清楚:机密不要写进 yaml,用 Drone secrets 或外部 vault。步骤应幂等,失败立刻退出。自托管要注意 runner 权限,避免流水线容器挂载 docker.sock 变成提权入口。
容易踩的坑
- 机密不要写进 yaml,用 Drone secrets 或外部 vault。
- 步骤应幂等、失败立刻退出。
- 自托管要注意 runner 权限,避免流水线容器挂载
docker.sock变成提权入口。
什么时候用:小型团队用它替代重量级 CI 很合适;大型组织则要补上审计与并发配额。
四、GitLab CI:stages/job 模型
GitLab CI 用 .gitlab-ci.yml 定义 stages 与 job,Runner 领取执行。include 复用模板,rules 控制分支;缓存与 artifacts 在 job 间传递;变量分文件、组和 CI/CD 设置。Docker executor 隔离依赖,缓存 key 要含锁文件 hash,保护分支用 protected variables,matrix 可并行多版本。自托管 Runner 注意并发与磁盘;密钥用 masked / protected,与 Container Registry 联动构建镜像;调试用 CI_DEBUG_TRACE 谨慎,避免泄密。迁移 GitHub Actions 时语义不完全一一对应。
容易踩的坑
- 缓存 key 要含锁文件 hash。
- 失败允许
allow_failure要克制。 - 调试用
CI_DEBUG_TRACE谨慎,避免泄密。
什么时候用:代码本来就托管在 GitLab、想和 Container Registry / 内网 Runner 深度联动的团队。语义和 GitHub Actions 不完全对应,跨平台迁移要重做。
五、GitHub Actions:workflow YAML
GitHub Actions 用 workflow YAML 响应 push / PR,job 跑在 hosted runner 或自建。actions/checkout 取代码,matrix 测多版本,secrets 注入环境变量,OIDC 可免长期云密钥。复用 marketplace action 要锁 SHA 防投毒;concurrency 取消过期构建,artifact 上传测试报告;fork PR 默认不给 secrets。分钟计费要控缓存与依赖安装;复合 action 与 reusable workflow 减少重复;Android 构建注意 JDK 与 SDK 缓存;权限 GITHUB_TOKEN 默认收紧 contents;失败通知用 Slack action 即可。
容易踩的坑
- 复用 action 要锁 SHA 防投毒。
- fork PR 默认不给 secrets。
- 分钟计费要控缓存与依赖安装。
什么时候用:代码在 GitHub 的新项目首选;想省心就吃透 hosted runner + OIDC + reusable workflow。
附:特性对比表
| 工具 | 配置方式 | 部署形态 | 适用场景 | 安全 / 运维要点 |
|---|---|---|---|---|
| Jenkins | Jenkinsfile(声明式 pipeline) |
自托管服务器 + agent 节点 | 复杂企业内网、老构建机、高度自定义 | 关匿名读、agent 最小权限、备份 JENKINS_HOME、升级先测插件 |
| Travis CI | .travis.yml |
托管(GitHub 推送触发) | 维护老开源仓库、矩阵构建 | 密钥走加密变量、fork PR 不暴露机密、缓存可一键清 |
| Drone CI | .drone.yml |
单机 docker / Kubernetes,容器原生 | 小型团队自托管、轻量声明式 | 机密用 Drone secrets / vault、runner 不挂 docker.sock、步骤幂等 |
| GitLab CI | .gitlab-ci.yml |
自托管 Runner(Docker executor) | GitLab 托管代码、与 Container Registry 联动 | 缓存 key 含锁文件 hash、protected variables、CI_DEBUG_TRACE 谨慎 |
| GitHub Actions | workflow YAML | hosted / 自建 runner | GitHub 新项目、marketplace 生态 | action 锁 SHA 防投毒、OIDC 免长期密钥、fork PR 不给 secrets、GITHUB_TOKEN 收紧 |
CI/CD 工具选型:Jenkins、Travis、Drone、GitLab CI、GitHub Actions 怎么选
https://lautung.com/archives/cicd-tools
评论