这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战
Jenkins
Jenkins 是一个广泛用于持续集成的可视化web自动化工具,Jenkins可以很好的支持各种语言的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站,比如:GitHub、bitbucker直接集成,而且插件众多,在这么多年的技术积累之后,在国内大部分公司都有使用Jenkins。
GitLab CI/CD
gitlab-ci 是 gitlab 8.0之后自动的一个持续集成系统,中心思想是当每一次push到gitlab的时候,都会触发一次脚本执行,然后脚本内容包括测试,编译,部署等一系列自定义的内容
gitlab-CI的脚本执行,需要自定义安装对应gitlab-runner来执行,代码push之后,webhook检测到代码发生变化,就会触发gitlab-CI,分配到各个Runner来运行相应的脚本script。这些脚本有的是测试项目用的,有的是部署用的。
GitLab CI | Jenkins | ||
|---|---|---|---|
| 分支可支配性 | 新创建的分支无需任何一部配置即可立即使用CI管道中的已定义作业 | Jenkins 2基于gitlab的多分支流水线可以实现 | gitlab更方便 |
| 定时构建 | 没有此功能,可以通过webApi使用同一台或另一台服务器上的cronjob 触发作业和管道 | 使用Jenkins 2 可以立即使用,使用cron式语法定义 | 尽管使用GitLab CI 无法做到这一点,其实如果配置了提交代码既触发流水线,那么最后一次提交的构建在什么时候没有什么不同,反而减少未提交代码的定时构建资源浪费 |
| 拉取请求支持 | GitLab与其CI平台紧密集成,可以方便查看和使用 | Jenkins 没有与元代码管理系统进一步集成,需要自行写代码插件实现 | |
| 权限管理 | GitLab与GitLabCI的深度整合,权限可以统一管理 | Jenkins 2没有内置的存储库管理器,因此没哟办法直接在存储库管理器和CI/CD 平台之间合并权限 | |
| 存储库交互 | GitLab CI 是Git存储库管理器GitLab的固定组件,因此CI/CD 流程和存储库功能之间提供了良好的交互 | Jenkins 2 与存储库管理器都是松散耦合的,因此在选择版本控制系统时非常灵活 | |
| 插件管理 | GitLab是开放式的,任何人都可以直接向代码库贡献更改,一旦合并,将自动测试并维护每个更改 | 扩展Jenkins的本级功能是通过插件完成的。插件的维护,保护和升级成本很高 |
总结
GitLabCI
- 轻量级,不需要复杂的安装手段
- 配置简单,与
gitlab可直接适配 - 实时构建日志十分清晰,
UI交互体验很好 - 使用
YAML进行配置,任何人都可以很方便的使用 - 没有统一的管理界面,无法统筹管理所有项目
- 配置依赖于代码仓库,耦合度没有
Jenkins低
Jenkins
- 编译服务和代码仓库分离,耦合度低
- 插件丰富,支持语言众多
- 有统一的
web管理界面 - 插件以及是自身安装较为复杂
- 体量较大,不是很适合小型团队
GitLabCI有助于 DevOps 人员,例如敏捷开发中,开发和运维是同一个人,最便捷的开发方式
JenkinsCI适合在多角色团队中,职责分明、配置与代码分离、插件丰富