Gitlab CI vs Jenkins

Rav*_*763 115 git jenkins gitlab gitlab-ci drone.io

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

Rik*_*Rik 111

这是我的经历:

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

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

TL; DR;

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

大多数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" Jenkinsfilepipline插件,默认情况下来自Jenkins 2),但过去比gitlab ci更少耦合到存储库.

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

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

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

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

写作时的一些好处

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

  • 由于[Blue Ocean](https://jenkins.io/projects/blueocean/),Jenkins现在可以获得更好的GUI (12认同)
  • 对于yaml文件最好的是,您将对管道的更改直接记录在它应该位于存储库中作为源代码的一部分.因此,您可以为不同的发布分支创建具有不同yaml文件的分支.当然,yaml合并可能是混乱:)成像合并jenkins的两个piplelines,这是一个更难的工作. (4认同)
  • “社区版仅支持单个文件。企业版支持多个文件”是什么意思。?抱歉,我试图阅读随附的问题,但无法联系起来。 (4认同)
  • 从gitlab 9.3开始,添加了多项目管道支持.这对我来说是坚持詹金斯的主要原因之一.目前我正在做一个PoC来检查我是否可以使用gitlab进行管理,因为他们现在显然也在关注这个问题并且它们的发展速度要快得多.除此之外,我真的很喜欢UI以及它随着时间的推移如何演变. (3认同)

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

  • 关于Gitlab,我完全赞同你.在撰写本文时,gitlab并不像现在这样完整.我非常喜欢Gitlab作为一个工具,并且非常感谢这些人所做的所有工作. (4认同)
  • @Rik我喜欢Gitlab CI但是我听到另一方的论点说它难以维护yaml文件,因为没有可重用性,因为管道中的许多yaml文件遵循相同的结构而且Templating不被认为是一个优秀的选项jenkinsfile因为jenkinsfile使用了groovy.所以关于可重用性的代码与配置.你可以分享一下你对此的想法吗? (3认同)

avi*_*rat 18

首先,截至今天,Gitlab Community Edition可以与Jenkins完全互操作.没有问题.

接下来,我将结合Jenkins和gitlab-ci的成功经验给出一些反馈.我还将讨论你是应该同时使用它们还是仅使用其中一种,以及出于什么原因.

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

GitLab-CI和Jenkins的优势

GitLab-CI

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

这些代码管道显然可以存储在代码库中,强制执行"一切代码"实践(访问,版本控制,可重复性,可重用性......).

gitlab-ci.yml 是一个很棒的视觉管理工具:

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

詹金斯

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

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

一起使用GitLab-CI和Jenkins

起初听起来有点多余,但是将gitlab-ci和Jenkins结合起来非常强大.

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

这种设计的另一个好处是在工具之间失去耦合:

  • 我们可以替换任何构建工厂组件,而无需重做整个CI/CD过程
  • 我们可以拥有一个异构的构建环境,组合(可能是几个)Jenkins,Team City,你可以命名它,并且仍然只有一个监控工具.

权衡

嗯,当然,这个设计需要付出代价:初始设置很麻烦,你需要对许多工具有一个最低限度的理解.

因此,我建议不要这样设置

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

如果你不处于这两种情况中,那么你最好只选择其中一种,但不能两者兼而有之.

如果我不得不选一个

两者gitlab-ci.yml和詹金斯都有利有弊.两者都是强大的工具.那么选择哪一个?

答案1

选择您的团队(或其他人)已具备一定专业水平的团队.

答案2

如果你们都是CI技术的新手,那就选择一个然后开始吧.

  • 如果你正在使用Gitlab并且对代码的所有东西都有诀窍,那么选择它就会让人感觉完全敏感groovy.
  • 如果您必须与许多其他CI/CD工具对话或者绝对需要GUI来构建您的工作,请转到Jenkins.

那些使用Gitlab并且不确定他们会继续这样做的人仍然要记住,选择gitlab-ci.yml意味着要删除所有CI/CD管道.

最后一句话是:由于它有很多插件,所以余额略微偏向Jenkins,但很有可能groovy很快填补空白.


Ste*_*any 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
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)

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