# CI/CD 工具选型

常见的 CI/CD 工具有 Jenkins、GitLabCI、Drone 等等,这次就这三个工具进行选择。这里有一篇讨论工具选择的文章

# Drone

Go 语言开发的非常轻量级的工具,镜像大小只有 60 多 M,原生支持 Docker,插件都是 Docker 容器,所有的操作均在容器中完成。

优点:

  1. 非常轻量,部署简单
  2. 高效,pipeline 可读性非常好
  3. 原生支持 Docker
  4. 自定义插件和使用社区插件也很简单
  5. 针对单个步骤可以多事件触发,或者是分支触发

缺点:

  1. 文档不完善,高度依赖社区
  2. UI 很简单
  3. 只能对接一个代码库

# GitLabCI

优点:

  1. 和 gitlab 集成度很高
  2. 不需要部署,gitlab 里就能够使用
  3. 支持 autoscale
  4. UI 可视化,操作性很强

缺点:

  1. 没有插件,对接第三方需要自己实现
  2. 只能支持 gitlab 仓库

# Jenkins

Jenkins 是一款 java 开发的功能强大的 CI 工具,其前身为 oracle 的 Hudson (软件)项目,2011 年正式独立出来,Jenkins 也是目前非常老牌和主流的 CI 工具,最早只能支持 java 语言,后续通过各类语言插件实现多种编程语言支持,Jenkins 也是目前插件种类最丰富的 CI 工具。

优点:

  1. 既有功能完善的 UI,也支持 pipeline as code
  2. 老牌 CI 工具文档很全面
  3. 插件生态丰富,基本上想要对接的工具都能找到对应插件
  4. 支持同时对接多个不同代码仓库

缺点:

  1. 对容器、k8s,代码仓库对接配置比较烦索
  2. 自定义插件难度大
  3. 独立的用户权限管理系统,多个开发团队共享一个 master,会导致权限配置很困难,但若每个团队用各自 Jenkins,又容易导致很多重复性工作