GitlabCI与JenkinsCI对比
# jenkins 是什么?
Jenkins 是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于 Hudson(Hudson 是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins 用 Java 语言编写,可在 Tomcat 等流行的 servlet 容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有 SVN、GIT,构建工具有 Maven、Ant、Gradle。
- Jenkins 是一个广泛用于持续集成的可视化 web 自动化工具
- 可以很好支持各种语言的项目构建
- 安全兼容 ant、maven、gradle 等多种第三方构建工具
- 同时跟 svn、git 能无缝集成
- 直接支持源代码托管网站,比如 github、bitbucket 直接集成
- 插件众多,多年的技术积累,大多数公司都有使用 jenkins
[[附件/images/50c8dd30e35112a0df992156fe4a1e19_MD5.jpeg|Open: 1592146095057-1b9a0614-8902-44f2-91eb-2e79528ff10a.png]]
# 二、GitLab CI/CD
- gitlab-CI 是 gitlab8.0 之后自带的一个持续集成系统,中心思想是当每一次 push 到 gitlab 的时候,都会触发一次脚本执行,然后脚本内容包括了测试、编译、部署等一系列自定义内容
- gitlab-CI 的脚本执行,需要自定义安装对应 gitlab-runner 来执行,代码 push 之后,webhook 检测到代码变化,就会触发 gitlab-CI,分配到各个 runner 来运行相应的脚本 script。这些脚本有的是测试项目用的,有的是部署用的。
[[附件/images/f040598f68f4a933032368e6f63609d8_MD5.jpeg|Open: 1592112869049-af7d6873-18cf-48af-855a-b043fd710920.png]]
[[附件/images/3d4d4dcdb2586d2a26132c635c18c75a_MD5.jpeg|Open: f040598f68f4a933032368e6f63609d8_MD5.jpeg]]
# 三、对比点
# 1.分支可配置性
分支可配置性
- 使用 Gitlab-CI,新创建的分支无需任何一步配置即可立即使用 CI 管道中定义的作业
- Jenkina 2 基本 gitlab 的多分支流水线可以实现,相对配置来说 gitlab 更加方便
# 2.定时执行构建
定时执行构建
有时,根据时间触发作业或整个管道会有所帮助。例如,非常规时间,夜间定时构建
- 使用 Jenkins 2 可以立即使用,可以在应执行作业或管道中的那一刻以 cron 式语法定义
- Gitlab CI 没有此功能。但是可以通过一种变通办法实现:通过 webAPI 使用同一台或另一台服务器上的 cronjob 触发作业或管道实现
# 3.拉取请求支持
拉取请求支持
如果很好地集成了存储库管理器和 CI/CD 平台,可以看到请求的当前构建状态,使用次功能,可以避免将代码合并到不起作用或无法正确构建的主分支中
- Jenkins 没有与源代码管理系统进一步集成,需要管理员自行写代码或插件实现
- Gitlab 与其 CI 平台紧密集成,可以方便查看每个打开或关闭拉取请求的运行和完成管道
# 4.权限管理
从存储库管理器的权限管理对于不想为每个服务分别设置每个用户的权限的大型开发人员或者组织团体很有用。大多数情况下,两种情况下的权限都是相同的,因此默认情况下应将他们配置在一个位置
- 由于 Gitlab 与 GitlabCI 的深度整合,权限可以统一管理
- 由于 Jenkins 2 没有内置的存储库管理器,因此它无法直接在存储库管理器和 CI/CD 平台之间合并权限
# 5.存储库交互
- Gitlab CI 是 Git 存储库管理器 Gitlab 的固定组件,因此在 CI/CD 流程和存储库功能之间提供了良好的交互
- Jenkins 2 与存储库管理器都是松散耦合的,因此在选择版本控制系统时非常的灵活。此外,Jenkins 2 强调了对插件的支持,以进一步扩展或改善软件的现有功能
# 6.插件管理
- 扩展 Jenkins 的本机功能是通过插件完成的。插件的维护,保护和升级成本很高
- Gitlab 是开放式的,任何人都可以直接向代码库贡献更改,一旦合并,他将自动测试并维护每个更改
# 四、总结
# GitlabCI
- 轻量级,不需要复杂的安装手段
- 配置简单,与 gitlab 可直接适配
- 实时构建日志十分清晰,UI 交互体验很好
- 使用 YAML 进行配置,任何人都可以很方便的使用
- 没有统一的管理界面,无法统筹管理所有项目
- 配置依赖与代码仓库,耦合度没有 Jenkins 低
- 天然支持分布式,gitlab 的 runner 可以装在任何一台电脑上,方便测试和集成
# Jenkins
- 编译服务和代码仓库分离,耦合度低
- 插件丰富,支持语言众多
- 有统一的 web 管理界面
- 插件以及自身安装较为复杂
- 体量较大,不是很适合小型团队
GitLabCI 有助于 DevOps 人员,例如敏捷开发中,开发和运维是同一个人,最便捷的开发方式。
JenkinsCI 适合在多角色团队,职责分明、配置和代码分离、插件丰富
在使用过两者后,个人觉得 gitlab-ci 更简单易用,如果有 gitlab-ci 达不到的要求,可以考虑使用 jenkins。