GitLab CI vs Jenkins

1,138 阅读3分钟

这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

Jenkins

Jenkins 是一个广泛用于持续集成的可视化web自动化工具,Jenkins可以很好的支持各种语言的项目构建,也完全兼容antmavengradle等多种第三方构建工具,同时跟svngit能无缝集成,也支持直接与知名源代码托管网站,比如:GitHubbitbucker直接集成,而且插件众多,在这么多年的技术积累之后,在国内大部分公司都有使用Jenkins

GitLab CI/CD

gitlab-cigitlab 8.0之后自动的一个持续集成系统,中心思想是当每一次pushgitlab的时候,都会触发一次脚本执行,然后脚本内容包括测试,编译,部署等一系列自定义的内容 gitlab-CI的脚本执行,需要自定义安装对应gitlab-runner来执行,代码push之后,webhook检测到代码发生变化,就会触发gitlab-CI,分配到各个Runner来运行相应的脚本script。这些脚本有的是测试项目用的,有的是部署用的。

GitLab CIJenkins
分支可支配性新创建的分支无需任何一部配置即可立即使用CI管道中的已定义作业Jenkins 2基于gitlab的多分支流水线可以实现gitlab更方便
定时构建没有此功能,可以通过webApi使用同一台或另一台服务器上的cronjob 触发作业和管道使用Jenkins 2 可以立即使用,使用cron式语法定义尽管使用GitLab CI 无法做到这一点,其实如果配置了提交代码既触发流水线,那么最后一次提交的构建在什么时候没有什么不同,反而减少未提交代码的定时构建资源浪费
拉取请求支持GitLab与其CI平台紧密集成,可以方便查看和使用Jenkins 没有与元代码管理系统进一步集成,需要自行写代码插件实现
权限管理GitLabGitLabCI的深度整合,权限可以统一管理Jenkins 2没有内置的存储库管理器,因此没哟办法直接在存储库管理器和CI/CD 平台之间合并权限
存储库交互GitLab CIGit存储库管理器GitLab的固定组件,因此CI/CD 流程和存储库功能之间提供了良好的交互Jenkins 2 与存储库管理器都是松散耦合的,因此在选择版本控制系统时非常灵活
插件管理GitLab是开放式的,任何人都可以直接向代码库贡献更改,一旦合并,将自动测试并维护每个更改扩展Jenkins的本级功能是通过插件完成的。插件的维护,保护和升级成本很高

总结

GitLabCI

  • 轻量级,不需要复杂的安装手段
  • 配置简单,与gitlab可直接适配
  • 实时构建日志十分清晰,UI交互体验很好
  • 使用YAML进行配置,任何人都可以很方便的使用
  • 没有统一的管理界面,无法统筹管理所有项目
  • 配置依赖于代码仓库,耦合度没有Jenkins

Jenkins

  • 编译服务和代码仓库分离,耦合度低
  • 插件丰富,支持语言众多
  • 有统一的web管理界面
  • 插件以及是自身安装较为复杂
  • 体量较大,不是很适合小型团队

GitLabCI有助于 DevOps 人员,例如敏捷开发中,开发和运维是同一个人,最便捷的开发方式

JenkinsCI适合在多角色团队中,职责分明、配置与代码分离、插件丰富