Gitlab CI vs Jenkins

时间:2016-05-25 06:34:38

标签: git jenkins gitlab gitlab-ci drone.io

任何人都可以让我知道Jenkins和其他CI之间有什么区别,比如Gitlab-CI,drone.io随GIT发行。在一些研究中,我只能提出Gitlab社区版并不允许添加Jenkins,但Gitlab企业版会这样做。还有其他重大差异。

5 个答案:

答案 0 :(得分:105)

这是我的经历:

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

在他们的基础上他们几乎一样。他们将在服务器/ docker镜像上运行一些脚本。

TL; DR;

  • Jenkins更容易使用/学习,但有成为插件地狱的风险
  • Jenkins有一个GUI(如果必须可由其他人访问/维护,这可能是首选)
  • 与GitLab的集成少于Gitlab-ci
  • Jenkins可以拆分你的回购

大多数CI服务器非常简单(concourse.cigitlab-cicircle-citravis-cidrone.iogocd还有其他什么您)。它们允许您从yaml文件定义执行shell / bat。 Jenkins更加可插拔,并带有UI。根据您的需要,这可能是优势或劣势。

由于可用的所有插件,Jenkins非常易于配置。这样做的缺点是您的CI服务器可能成为插件的意义。

在我看来,在Jenkins中链接和编排作业要比通过Yaml(调用curl命令)简单得多(因为UI)。除此之外,Jenkins支持在服务器上没有安装某些二进制文件的插件时(不知道其他二进制文件)。

现在(jenkins2还支持更多“正确的ci”与Jenkinsfilepipline插件,默认情况下来自Jenkins 2),但过去较少耦合到存储库比如gitlab ci。

使用yaml文件定义构建管道(最后运行纯shell / bat)更清晰。

编辑:我在这里忘记提到的是Jenkins可用的插件,它允许您可视化各种报告,例如测试结果,覆盖范围和其他静态分析器。当然,您总是可以编写或使用工具为您执行此操作,但对Jenkins来说肯定是一个加分(特别是对于那些倾向于过分重视这些报告的经理人而言)

EDIT2:最近我和Gitlab-ci一起工作越来越多。在Gitlab,他们做得非常出色,让整个体验充满乐趣。我知道人们使用Jenkins,但是当你运行Gitlab并且可用时,很容易开始使用Gitlab-ci。即使他们在第三方集成中付出了相当大的努力,也不会像Gitlab-ci那样无缝集成任何东西。

  • 他们的文档应该让你立刻开始
  • 入门门槛非常低
  • 维护很简单(没有插件)
  • 缩放跑步者很简单
  • CI完全属于您的存储库
  • Jenkins的工作/意见可能会变得混乱

撰写本文时的一些好处

  • 仅支持单个文件,但很快就会fixed

答案 1 :(得分:52)

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

大部分功能来自同一浏览器标签下同一产品中的自包含integrating everything:从存储库浏览器,发行板或构建历史记录到部署工具和{ {3}}

我现在正在使用它来自动化和测试应用程序如何安装在不同的Linux发行版上,并且快速配置(尝试在firefox上打开复杂的Jenkins作业配置并等待要启动的非响应式脚本与编辑.gitlab-ci.yml的轻量级程序。由于monitoring,配置/调度奴隶所花费的时间要少得多;再加上runner binaries你得到相当体面和免费的共享跑步者的事实。

Jenkins在成为GitLab CI的超级用户几周后感觉更多手动,例如每个分支复制作业,安装插件以执行简单的操作,例如SCP上传。我遇到的唯一一个用例,就像我今天所想的那样,当涉及多个存储库时;这需要很好地解决。

顺便说一下,我现在正在写一篇关于GitLab CI的系列文章来演示如何用它来配置你的存储库CI基础设施并不困难。上周发布了第一篇介绍基础知识,优缺点和其他工具的差异:GitLab.com

答案 2 :(得分:9)

首先,从今天起,Gitlab社区版可以与Jenkins完全互操作。没问题。

接下来,我对结合Jenkins和gitlab-ci的成功经验提供了一些反馈。我还将讨论您是应该同时使用还是仅使用两者,以及出于什么原因。

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

GitLab-CI和詹金斯的长处

GitLab-CI

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

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

gitlab-ci是出色的视觉管理工具:

  • 团队的所有成员(包括非技术人员)都可以快速轻松地访问应用程序的生命周期状态。
  • 因此,它可用作发布管理的 interactive operational 仪表板。

詹金斯

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

使用groovy脚本也可以使用管道作为代码。

一起使用GitLab-CI和Jenkins

乍一看可能有点多余,但是将gitlab-ci和Jenkins结合起来非常强大。

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

此设计的另一个好处是工具之间失去了联系:

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

权衡

当然,这种设计需要付出一定的代价:初始设置很麻烦,您需要对许多工具有最少的了解。

由于这个原因,我不建议您进行此类设置,除非

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

如果您都不处于这两种情况下,则最好只选择其中之一,而不要同时使用两者。

如果我必须选一个

gitlab-ci和Jenkins都各有利弊。两者都是强大的工具。那么选择哪一个呢?

答案1

选择您的团队(或某个关闭的人)已经具有一定水平的团队

答案2

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

  • 如果您使用的是Gitlab,并且对所有内容都一窍不通,那么选择gitlab-ci就很有意义。
  • 如果您必须与许多其他CI / CD工具对话,或者绝对需要该GUI来构建作业,请选择Jenkins。

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

最后一句话是:由于Jenkins插件众多,因此余额偏小 ,但是gitlab-ci很快就会填补空白。

答案 3 :(得分:3)

我想补充一下我最近在Gitlab CI上进行的实验得出的一些发现。 11.6和11.7附带的功能真棒!

我特别喜欢only条件,这些条件基本上允许您为merge_requestpush(完整列表为here)建立单独的管道

此外,我真的很喜欢没有插件。当我需要一些更复杂的功能时,我只需要编写处理所需功能的自定义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了!是的,到目前为止(它)无法绘制具有覆盖率的漂亮图形,依此类推,但总的来说,它确实是整洁的工具!

编辑(02/23/2019): here's my post about我在Gitlab CI中喜欢的东西。它是用11.7“时代”编写的,因此当您阅读此答案时,Gitlab CI可能具有更多功能。

答案 4 :(得分:0)

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

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

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

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

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