下面分工具讲清特点、适合场景与落地要点,末尾附特性对比表。


一、Jenkins:可插拔服务器

Jenkins 是可插拔 CI 服务器,PipelineJenkinsfile 描述阶段。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 里把 installscript 写清楚,依赖安装失败不要混进测试日志;缓存依赖目录以加快构建,但缓存坏了要能一键清。

容易踩的坑

  • 密钥走加密变量,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 定义 stagesjobRunner 领取执行。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 收紧