GitLab CI与詹金斯[关闭]


129

Jenkins与Git发行版附带的其他CI(例如GitLab CI,drone.io)有什么区别?在一些研究中,我只能得出这样的结论:GitLab社区版不允许添加Jenkins,但是GitLab企业版可以。还有其他重大区别吗?


5
GitLab现在还汇总了GitLab CI与Jenkins的比较:about.gitlab.com/comparison/gitlab-vs-jenkins.html
bbodenmiller

Answers:


122

这是我的经验:

在我的工作中,我们使用GitLab EE管理存储库,并且正在运行Jenkins服务器(1.6)。

在此基础上,它们几乎相同。他们将在服务器/ Docker映像上运行一些脚本。

TL; DR;

  • Jenkins易于使用/学习,但是有成为地狱插件的风险
  • Jenkins有一个GUI(如果必须由其他人访问/维护,则可以使用它)
  • 与GitLab的集成少于与GitLab CI的集成
  • Jenkins可以从您的存储库中拆分出来

大多数CI服务器都非常简单(concourse.ci),gitlab-cicircle-citravis-cidrone.iogocd以及您拥有的其他东西。它们允许您从YAML文件定义中执行shell / bat脚本。Jenkins更可插入,并带有一个UI。根据您的需要,这可以是优点也可以是缺点。

由于所有可用的插件,Jenkins是非常可配置的。不利的一面是您的CI服务器可能会成为意粉。

在我看来,Jenkins中的作业链接和编排比通过YAML(调用curl命令)要简单得多(由于UI)。除此之外,Jenkins支持的插件会在服务器上不可用某些二进制文件时安装某些二进制文件(其他二进制文件对此一无所知)。

如今(Jenkins 2还通过Jenkinsfilepipline插件自Jenkins 2起默认支持更多的“适当的ci” ),但与GitLab CI相比,它与存储库的耦合较少。

使用YAML文件定义您的构建管道(最终运行纯shell / bat)更为简洁。

Jenkins可用的插件使您可以可视化各种报告,例如测试结果,覆盖率和其他静态分析仪。当然,您始终可以编写或使用工具来为您完成此操作,但这绝对对詹金斯(尤其是对于倾向于对这些报告过于看重的经理们)来说是一个加分项。

最近,我与GitLab CI的合作越来越多。在GitLab,他们做得非常出色,使整个体验变得有趣。我知道人们会使用Jenkins,但是当您运行并启用了GitLab时,开始使用GitLab CI真的很容易。即使它们在第三方集成上花费了很多精力,也不会有任何东西可以像GitLab CI那样无缝集成。

  • 他们的文档将立即使您入门。
  • 入门的门槛非常低。
  • 维护很容易(无需插件)。
  • 扩展跑步者很简单。
  • CI完全属于您的存储库的一部分。
  • 詹金斯的工作/观点可能会变得混乱。

撰写本文时有一些好处:

  • 仅支持社区版中的单个文件。企业版中的多个文件。

13
詹金斯现在可以通过Blue Ocean
Ayoub Kaanich

3
从gitlab 9.3开始,添加了多项目管道支持。对我来说,这是坚持詹金斯的主要原因之一。目前,我正在执行PoC来检查我是否可以使用gitlab进行管理,因为他们显然现在也专注于此,并且他们的发展速度越来越快。除此之外,我真的很喜欢UI及其随着时间的演变。
里克2015年

4
使用yaml文件最好的是,您将对更改的记录直接记录在存储库中应作为源代码的一部分。因此,对于不同的发行分支,您可以拥有包含不同yaml文件的分支。当然,yaml合并可能是一团糟:)成像在詹金斯中合并两个piplelines,这是一项艰巨的工作。
ChristianMüller18年

jenkins提供的工具比gitlab ci多得多。gitlab / jenkins如果设置正确,则可以进行集成,并且对用户来说实际上是透明的。使用存储库中的Jenkinsfile可以轻松地在jenkins中合并两个pipleline ....您将需要gitlab和gitlab源分支插件
sancelot

1
“仅在社区版本中支持单个文件。在企业版本中多个文件”的含义是什么。?抱歉,我尝试阅读随附的问题,但没有联系。
Lester

62

我同意Rik的大部分笔记,但我对哪种更简单的看法却相反:GitLab被证明是一个很棒的工具。

大部分功能来自于设备齐全并将所有内容集成到同一产品的同一浏览器选项卡下:从存储库浏览器,发行板或构建历史到部署工具和监视

我现在正在使用它来自动化和测试应用程序如何在不同的Linux发行版上进行安装,并且配置速度非常快(尝试在Firefox中打开复杂的Jenkins作业配置,并等待无响应脚本与。编辑的轻巧程度.gitlab-ci.yml)。

得益于运行程序二进制文件,在配置/扩展从站上花费的时间大大减少了;再加上在GitLab.com上您获得了相当不错的免费共享跑步者。

在成为GitLab CI的高级用户后,Jenkins感到更加手动,例如,每个分支重复工作,安装插件以执行诸如SCP上传之类的简单操作。到目前为止,我所面对的唯一用例是涉及多个存储库。还需要很好地弄清楚。

顺便说一句,我目前正在编写有关GitLab CI的系列文章,以演示如何使用它配置存储库CI基础架构并不难。上周发布的第一篇文章介绍了其他工具的基础,优缺点以及与众不同:与GitLab CI进行快速自然的持续集成


5
关于Gitlab,我完全同意。在撰写本文时,gitlab并不像现在这样完整。我非常喜欢Gitlab作为工具,并非常感谢他们投入的所有工作。
瑞克

1
@alfageme:无论如何,我会在提到的网站上查看您的报告:感谢您的所有解释。目前,我将决定是否将gitlabCI或Jenkins用于CI -Stuff。
Max Schindler

3
@Rik我确实喜欢Gitlab CI,但是我听到另一边的说法说它很难维护yaml文件,因为没有可重用性,因为管道中的许多yaml文件都遵循相同的结构,而模板化不被视为是更好的选择jenkinsfile,因为jenkinsfile使用groovy。因此,所有这些都是关于代码与配置的可重用性。能否请您分享一下您的想法?
user1870400

1
@ user1870400我不太确定您对模板的意思。因为据我所知,它只是您存储库中的一个文件。与您的相比没什么不同Jenkinsfile。没错,您Jenkinsfile可以使用常规代码(+其他Java库)来运行代码,该.gitlab-ci.yaml文件主要支持shell,但是(取决于运行程序的位置)。另一方面,您也可以从shell脚本中调用所有这些命令,但是缺点是您正在创建机器依赖项(我认为这不是很透明)。
Rik

1
@Alfageme-我也开始使用Gitlab CI,并远离Jenkins。我会立即使用它进行自动构建,上传到Nexus,部署到DEV env并运行单元测试。这样的顺序在项目级别(标准)上执行。DEV之后,我还需要管理多项目(Gitlab组)部署。我创建了使用Gitlab,Nexus API等的GUI,您可以在其中选择要部署的项目的最新TAG,并对项目进行分组(也可以是天真)。我正在努力扩展以支持版本矩阵定义(projec1v1.1与project2v3.2兼容),为此我将在gitlab上提出一项功能请求。
肯赛

22

首先,从今天开始,GitLab社区版可以与Jenkins完全互操作。没有问题。

在下文中,我对结合Jenkins和GitLab CI的成功经验提供了一些反馈。我还将讨论您是应该同时使用还是两者都使用,以及出于什么原因。

我希望这将为您提供有关自己项目的质量信息。

GitLab CI和Jenkins的优势

亚搏体育app CI

GitLab CI自然地集成在GitLab SCM中。您可以使用gitlab-ci.yml文件创建管道,并通过图形界面对其进行操作。

这些作为代码的管道显然可以存储在代码库中,从而加强“一切都作为代码”实践(访问,版本控制,可再现性,可重用性等)。

GitLab CI是出色的可视化管理工具:

  • 团队的所有成员(包括非技术人员)都可以快速轻松地访问应用程序生命周期状态。
  • 因此它可以用作 交互式操作用于发布管理信息中心。

詹金斯

Jenkins是一个很棒的构建工具。它的优势在于其许多插件。特别是,我在Jenkins与其他CI或CD工具之间使用接口插件感到非常幸运。与重新开发(可能很糟)两个组件之间的对话框界面相比,这总是一个更好的选择。

也可以使用groovy脚本将流水线作为代码。

一起使用GitLab CI和Jenkins

起初听起来可能有点多余,但是将GitLab CI和Jenkins结合起来是非常强大的。

  • GitLab CI协调(链,运行,监视...)管道,并且可以受益于集成到GitLab的图形界面
  • Jenkins负责这项工作,并促进了与第三方工具的对话。

这种设计的另一个好处是工具之间的连接松散:

  • 我们可以替换任何构建工厂组件,而无需重新执行整个CI / CD过程
  • 我们可能会有一个异构的构建环境,您可以将Jenkins,TeamCity(可能是多个)结合在一起,并且仍然只有一个监视工具。

权衡

好吧,当然,要为此设计付出代价:初始设置很麻烦,并且您需要对许多工具有最少的了解。

因此,我不建议您进行此类设置,除非

  • 您有许多第三方工具需要处理。那时,Jenkins附带了许多插件,非常方便。
  • 您必须使用异构技术来处理复杂的应用程序,每个应用程序都有不同的构建环境,并且仍然需要具有统一的应用程序生命周期管理UI。

如果您都不处于这两种情况下,则最好只使用两者中的一种,而不是两者兼而有之。

如果我必须选一个

GitLab CI和Jenkins都有优点和缺点。两者都是强大的工具。那么选择哪一个呢?

答案1

选择您的团队(或亲密的人)已经具备一定专业知识的团队。

答案2

如果您都是CI技术的新生,那么只需选择其中一个就可以开始。

  • 如果您使用的是GitLab,并且对所有内容都一窍不通,那么选择GitLab CI绝对是明智之举。
  • 如果您必须与许多其他CI / CD工具对话,或者绝对需要该GUI来构建您的工作,请选择Jenkins。

那些正在使用GitLab并不确定会继续这样做的人仍然必须记住,选择GitLab CI意味着将破坏您的所有CI / CD管道。

最后一句话是:天平倾斜一点点,因为它的许多插件对詹金斯位,但机会是GitLab CI将迅速填补了国内空白。


@Peter Mortensen:THX!
avi.elkharrat

6

我想补充一下我最近在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

将它们放到一些公共存储库中,并将它们包括在主管道中:

include:
  - remote: https://....

并使用它们来扩展某些工作:

test:
  extends: .myTemplate
  only:
    refs: ["master"]
    variables:
      - $CI_PIPELINE_SOURCE == "push"

我非常喜欢GitLab CI!是的,到目前为止(它)无法绘制具有覆盖率的漂亮图形,等等,但总体而言,这是一个非常整洁的工具!

编辑(2019-02-23): 这是我关于 GitLab CI中我喜欢的东西的文章。它是用11.7“时代”编写的,因此当您阅读此答案时,GitLab CI可能具有更多功能。

编辑(2019-07-10): Gitlab CI现在支持多个extends例如

extends:
 - .pieceA
 - .pieceB

查看官方文档以获取有关多个扩展的更多信息


0

如果您的构建/发布/部署和测试工作不是很复杂,那么使用gitlab ci具有自然的优势。

由于gitlab-ci.yml在每个分支中都与代码一起出现,因此您可以更有效地修改ci / cd步骤,尤其是测试(在不同环境中有所不同)。

例如,您想对dev分支的任何签入进行单元测试,而您可能想在QA分支上进行完整的功能测试,并且在生产中进行有限的仅get类型的测试,这可以使用gitlab ci轻松实现。

除了出色的UI外,第二个优势是它可以使用docker映像执行任何阶段的功能,使主机运行程序保持完整,从而减少出错的可能性。

而且gitlab ci会自动为您签入,您不必单独管理jenkins master

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.