Jenkins
是一个广泛用于持续集成的可视化 web
自动化工具,jenkins
可以很好的支持各种语言的项目构建,也完全兼容ant
、maven
、gradle
等多种第三方构建工具,同时跟svn
、git
能无缝集成,也支持直接与知名源代码托管网站,比如github
、bitbucket
直接集成,而且插件众多,在这么多年的技术积累之后,在国内大部分公司都有使用Jenkins
。
gitlab-CI
是gitlab8.0
之后自带的一个持续集成系统,中心思想是当每一次push
到gitlab
的时候,都会触发一次脚本执行,然后脚本的内容包括了测试,编译,部署等一系列自定义的内容。
gitlab-CI
的脚本执行,需要自定义安装对应gitlab-runner
来执行,代码push
之后,webhook
检测到代码变化,就会触发gitlab-CI
,分配到各个Runner
来运行相应的脚本script
。这些脚本有的是测试项目用的,有的是部署用的。
分支的可配置性
定时执行构建
有时,根据时间触发作业或整个管道会有所帮助。例如,常规的夜间定时构建。
使用Jenkins 2可以立即使用。可以在应执行作业或管道的那一刻以cron式语法定义。
GitLab CI没有此功能。但是,可以通过一种变通办法来实现:通过WebAPI使用同一台或另一台服务器上的cronjob触发作业和管道。
尽管使用GitLab CI无法做到这一点,其实如果配置了提交代码即触发流水线,那么最后一次提交的构建在什么时候没有什么不同,反而减少未提交代码的定时构建资源浪费。
拉取请求支持
如果很好地集成了存储库管理器和CI / CD平台,您可以看到请求的当前构建状态。使用这种功能,可以避免将代码合并到不起作用或无法正确构建的主分支中。
权限管理
从存储库管理器继承的权限管理对于不想为每个服务分别设置每个用户的权限的大型开发人员或组织团体很有用。大多数情况下,两种情况下的权限都是相同的,因此默认情况下应将它们配置在一个位置。
由于GitLab与GitLabCI的深度整合,权限可以统一管理。
由于Jenkins 2没有内置的存储库管理器,因此它无法直接在存储库管理器和CI / CD平台之间合并权限。
存储库交互
插件管理
GitLabCI
轻量级,不需要复杂的安装手段。
配置简单,与gitlab
可直接适配。
实时构建日志十分清晰,UI
交互体验很好
使用 YAML
进行配置,任何人都可以很方便的使用。
没有统一的管理界面,无法统筹管理所有项目
配置依赖于代码仓库,耦合度没有Jenkins
低
Jenkins
web
管理界面。