任何人都可以让我知道Jenkins和其他CI之间有什么区别,比如Gitlab-CI,drone.io随GIT发行。在一些研究中,我只能提出Gitlab社区版并不允许添加Jenkins,但Gitlab企业版会这样做。还有其他重大差异。
答案 0 :(得分:105)
这是我的经历:
在我的工作中,我们使用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那样无缝集成任何东西。
撰写本文时的一些好处
答案 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 SCM中。您可以使用gitlab-ci.yml
文件创建管道,并通过图形界面对其进行操作。
这些作为代码的管道显然可以存储在代码库中,从而实施“作为代码的一切”实践(访问,版本控制,可再现性,可重用性...)。
gitlab-ci
是出色的视觉管理工具:
詹金斯
Jenkins是一个很棒的构建工具。它的优势在于其许多插件。特别是,我在Jenkins与其他CI或CD工具之间使用接口插件感到非常幸运。与重新开发(可能很糟糕)两个组件之间的对话框界面相比,这总是一个更好的选择。
使用groovy
脚本也可以使用管道作为代码。
乍一看可能有点多余,但是将gitlab-ci和Jenkins结合起来非常强大。
此设计的另一个好处是工具之间失去了联系:
当然,这种设计需要付出一定的代价:初始设置很麻烦,您需要对许多工具有最少的了解。
由于这个原因,我不建议您进行此类设置,除非
如果您都不处于这两种情况下,则最好只选择其中之一,而不要同时使用两者。
gitlab-ci
和Jenkins都各有利弊。两者都是强大的工具。那么选择哪一个呢?
答案1
选择您的团队(或某个关闭的人)已经具有一定水平的团队
答案2
如果您都是CI技术的新生,只需选择一个就可以开始使用。
gitlab-ci
就很有意义。 正在使用Gitlab并不确定会继续这样做的那些人仍然要记住,选择gitlab-ci
意味着将破坏您的所有CI / CD管道。
最后一句话是:由于Jenkins插件众多,因此余额偏小 ,但是gitlab-ci
很快就会填补空白。
答案 3 :(得分:3)
我想补充一下我最近在Gitlab CI上进行的实验得出的一些发现。 11.6和11.7附带的功能真棒!
我特别喜欢only
条件,这些条件基本上允许您为merge_request
或push
(完整列表为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