Rik*_*Rik 111
这是我的经历:
在我的工作中,我们使用gitlab ee管理我们的存储库,并且我们运行了Jenkins服务器(1.6).
在他们的基础上他们几乎一样.他们将在服务器/ docker镜像上运行一些脚本.
TL; DR;
大多数CI服务器非常简单(concourse.ci,gitlab-ci,circle-ci,travis-ci,drone.io,gocd以及你还有什么).它们允许您从yaml文件定义执行shell/bat.Jenkins更加可插拔,并带有UI.根据您的需要,这可能是优势或劣势.
由于可用的所有插件,Jenkins非常易于配置.这样做的缺点是您的CI服务器可能成为插件的意义.
在我看来,在Jenkins中链接和编排作业要比通过Yaml(调用curl命令)简单得多(因为UI).除此之外,Jenkins支持在服务器上不可用时安装某些二进制文件的插件(不知道其他二进制文件).
如今(jenkins2还支持更多"正确的ci" Jenkinsfile
和pipline插件,默认情况下来自Jenkins 2),但过去比gitlab ci更少耦合到存储库.
使用yaml文件来定义构建管道(最后运行纯shell/bat)更清晰.
编辑:我在这里忘记提到的是Jenkins可用的插件,它允许您可视化各种报告,例如测试结果,覆盖范围和其他静态分析器.当然,您总是可以编写或使用工具为您执行此操作,但对Jenkins来说绝对是一个优势(特别是对于那些倾向于过多评估这些报告的经理而言)
EDIT2:最近我和Gitlab-ci一起工作越来越多.在Gitlab,他们做得非常出色,让整个体验充满乐趣.我知道人们使用Jenkins,但是当你运行Gitlab并且可用时,很容易开始使用Gitlab-ci.即使他们在第三方集成中付出了相当大的努力,也不会像Gitlab-ci那样无缝集成任何东西.
写作时的一些好处
Alf*_*eme 59
我同意Rik的大部分注释,但我对哪个更简单的看法恰恰相反:GitLab被证明是一个很棒的工具.
大部分功能来自于自包含,并在同一浏览器选项卡下将所有内容集成到同一产品中:从存储库浏览器,发行板或构建历史记录到部署工具和监视.
我现在正在使用它来自动化和测试应用程序如何安装在不同的Linux发行版上,并且配置速度非常快(尝试在firefox上打开复杂的Jenkins作业配置并等待非响应脚本出现如何轻量级编辑.gitlab-ci.yml
).由于运行程序二进制文件,配置/ scalling slave的时间要少得多; 再加上GitLab.com你得到了相当体面和免费的共享跑步者这一事实.
在成为GitLab CI的高级用户几周后,Jenkins感觉更加手动,例如,每个分支复制作业,安装插件以执行简单的操作,例如SCP上传.我遇到的唯一一个用例,就像我今天所想的那样,当涉及多个存储库时; 这需要很好地解决.
顺便说一句,我现在正在写一篇关于GitLab CI的系列文章来演示如何用它配置你的存储库CI基础设施并不困难.上周发布了第一篇介绍其他工具的基础知识,优缺点和差异:https://solidgeargroup.com/gitlab_countinuous_integration_intro
avi*_*rat 18
首先,截至今天,Gitlab Community Edition可以与Jenkins完全互操作.没有问题.
接下来,我将结合Jenkins和gitlab-ci的成功经验给出一些反馈.我还将讨论你是应该同时使用它们还是仅使用其中一种,以及出于什么原因.
我希望这能为您提供有关您自己项目的高质量信息.
GitLab-CI
gitlab-ci.yml
自然地集成在Gitlab SCM中.您可以使用groovy
文件创建管道并通过图形界面对其进行操作.
这些代码管道显然可以存储在代码库中,强制执行"一切代码"实践(访问,版本控制,可重复性,可重用性......).
gitlab-ci.yml
是一个很棒的视觉管理工具:
詹金斯
Jenkins是一个很棒的构建工具.它的优势在于它的众多插件.特别是,我很幸运在Jenkins和其他CI或CD工具之间使用接口插件.这总是比重新开发(可能很糟糕)两个组件之间的对话界面更好的选择.
使用groovy
脚本也可以使用管道作为代码.
起初听起来有点多余,但是将gitlab-ci和Jenkins结合起来非常强大.
这种设计的另一个好处是在工具之间失去耦合:
嗯,当然,这个设计需要付出代价:初始设置很麻烦,你需要对许多工具有一个最低限度的理解.
因此,我建议不要这样设置
如果你不处于这两种情况中,那么你最好只选择其中一种,但不能两者兼而有之.
两者gitlab-ci.yml
和詹金斯都有利有弊.两者都是强大的工具.那么选择哪一个?
答案1
选择您的团队(或其他人)已具备一定专业水平的团队.
答案2
如果你们都是CI技术的新手,那就选择一个然后开始吧.
groovy
.那些使用Gitlab并且不确定他们会继续这样做的人仍然要记住,选择gitlab-ci.yml
意味着要删除所有CI/CD管道.
最后一句话是:由于它有很多插件,所以余额略微偏向Jenkins,但很有可能groovy
很快填补空白.
我想补充一下我最近在GitLab CI上进行的实验得出的一些发现。11.6和11.7附带的功能真棒!
具体来说,我喜欢这种only
条件,基本上可以让您为merge_request
或建立单独的管道push
(完整列表在此处)
另外,我真的很喜欢没有插件。当我需要一些更复杂的功能时,我只需编写一个处理所需功能的自定义Docker映像即可(与drone.io中的概念相同)。
如果您想了解DRY,那么现在绝对有可能!您可以编写“模板”
.myTemplate:
image: node:10.14.2
script:
- npm install
- npm run test
Run Code Online (Sandbox Code Playgroud)
将它们放到一些公共存储库中,并将它们包括在主管道中:
include:
- remote: https://....
Run Code Online (Sandbox Code Playgroud)
并使用它们来扩展某些工作:
test:
extends: .myTemplate
only:
refs: ["master"]
variables:
- $CI_PIPELINE_SOURCE == "push"
Run Code Online (Sandbox Code Playgroud)
我非常喜欢GitLab CI!是的,它(到目前为止)无法绘制具有覆盖率的漂亮图形,依此类推,但总体而言,这是一个非常整洁的工具!
编辑(2019-02-23): 这是我关于 GitLab CI中我喜欢的东西的文章。它是用11.7“时代”编写的,因此当您阅读此答案时,GitLab CI可能具有更多功能。
编辑(2019-07-10): Gitlab CI现在支持多个extends
例如
extends:
- .pieceA
- .pieceB
Run Code Online (Sandbox Code Playgroud)
查看官方文档以获取有关多个扩展的更多信息