gitlab CI简介
gitlab ci是在gitlab8.0之后自带的一个持续集成系统,中心思想是当每一次push到gitlab的时候,都会触发一次脚本执行,然后脚本的内容包括了测试、编译、部署等一系列自定义的内容。
gitlab ci的脚本执行,需要自定义安装对应的gitlab runner来执行,代码push之后,webhook检测到代码变化,就会触发gitlab ci,分配到各个runner来运行相应的脚本script。这些脚本有些是测试项目用的,有些是部署用的。
Gitlab ci与Jenkins对比
分支可配置性
使用gitlab ci,新创建的分支无需任何进一步的配置即可立即使用CI管道中的已定义作业。
Jenkins基于gitlab的多分支流水线插件可以实现。相对配置来说,gitlab ci更加方便。
拉取请求支持
如果很好的集成了存储库管理器的CI/CD平台,可以看到请求的当前构建状态。使用这个功能,可以避免将代码合并到不起作用或者无法正确构建的主分支中。
Jenkins没有与源代码管理系统进一步集成,需要管理员自行写代码或者插件实现。
gitlab与其CI平台紧密集成,可以方便查看每个打开和关闭拉动请求的运行和完成管道。
权限管理
从存储管理器继承的权限管理对于不想为每个服务分别设置每个用户的权限的大型开发人员或组织团体很有用。大多数情况下,两种情况下的权限都是相同的,因此默认情况下他们配置在一个位置。
由于gitlab与CI深度整合,权限可以统一管理。
由于Jenkins没有内置的存储库管理器,因此它无法直接在存储库管理器和CI/CD平台之间合并权限。
存储库交互
gitlab ci是git存储库管理器gitlab的固定组件,因此在ci/cd流程和存储库直接提供了良好的交互。
Jenkins与存储库管理器都是松散耦合的,因此在选择版本控制系统时它非常灵活。此外,就像其前身一样,Jenkins强调了对插件的支持,以进一步扩展或改善软件的现有功能。
插件管理
扩展Jenkins的本机功能是通过插件完成的,插件的维护,保护和成本很高。
gitlab是开放式的,任何人都可以直接向代码库贡献更改,一旦合并,它将自动测试并维护每个更改
Jenkins vs GitLab CI/CD 优缺点
Jenkins 的优点
大量插件库
自托管,例如对工作空间的完全控制
容易调试运行,由于对工作空间的绝对控制
容易搭建节点
容易部署代码
非常好的凭证管理
非常灵活多样的功能
支持不同的语言
非常直观
Jenkins 的缺点
插件集成复杂
对于比较小的项目开销比较大,因为你需要自己搭建
缺少对整个 pipeline 跟踪的分析
GitLab CI/CD 的优点
更好的 Docker 集成
运行程序扩展或收缩比较简单
阶段内的作业并行执行
有向无环图 pipeline 的机会
由于并发运行程序而非常易于扩展收缩
合并请求集成
容易添加作业
容易处理冲突问题
良好的安全和隐私政策
GitLab CI/CD 的缺点
需要为每个作业定义构建并上传 / 下载
在实际合并发生之前测试合并状态是不可能的
还不支持细分阶段
对比总结
gitlab ci
轻量级,不需要复杂的安装手段
配置简单,与gitlab可直接适配
实时构建日志十分清晰,UI交互体验很好
使用yaml进行配置,任何人都可以很方便的使用
没有统一的管理界面,无法统一管理所有的项目
配置依赖于代码仓库,耦合度没有Jenkins低
Jenkins
编译服务和代码仓库分离,耦合度低
插件丰富,支持语言众多
有统一的web管理页面
插件以及自身安装较为复杂
体量较大,不适合小型团队开发。
适用场景
gitlab ci有助于devops人员,例如敏捷开发中,开发人员与运维是同一个人,最便捷的开发方式
Jenkins适合在多角色团队中,职责分明,配置与代码分离,插件丰富。
评论区