Job DSL插件与管道插件

问题描述 投票:54回答:4

Job DSL PluginPipeline Plugin之间的主要区别是什么?

  1. 两者都为程序化创造就业提供了方法
  2. 哪个是最好的,因为前进,为什么?
  3. 如果两者具有相似的功能,它们是否有不同的用例?
  4. 由于Jenkins 2.0专注于Pipelines作为代码,这是否意味着job-dsl没有未来或者Pipeline Plugin是Job DSL插件的下一步?
jenkins jenkins-plugins jenkins-job-dsl
4个回答
61
投票

我对两者都有丰富的经验。一个简明的回答是Job DSL存在的时间更长,是Netflix的“编码”Jenkins的开源解决方案。它允许您将逻辑和变量引入到Jenkins作业的脚本中,并且通常会使用这些作业为特定项目形成某种“管道”。作为启用作业模板和脚本编写的常用方法,此插件获得了相当多的牵引力。

Jenkins Pipeline(2.0)是一个完全基于DSL的Jenkins工作的新版本,它试图消除将多个作业拼接在一起以填充单个管道的需要,这是迄今为止最常用的Job DSL。最初,由于Pipeline DSL没有提供Job DSL所做的许多功能,并且如上所述Job DSL允许您创建Pipeline作业,它们可以一起用于定义管道。

今天,IMO几乎没有理由使用Job DSL,因为Pipeline是Jenkins支持的Jenkins管道脚本编写机制,它已经达到或超过了Job DSL的大部分功能。正在为Pipeline本地开发新的插件,Jenkins开发人员鼓励那些没有插件与Pipeline集成。而Pipeline有几个优点:

  • 因为管道就是作业本身,所以不需要像使用管道一样使用管道“种子”作业。使用Job DSL,它只是一个创建其他作业的脚本。
  • 使用Pipeline,您可以使用参数化手动输入步骤等功能,从而允许您在管道中指定逻辑中游
  • 可以包含在Job DSL中的逻辑仅限于创建作业本身;而使用Pipeline,您可以直接在作业中包含逻辑。
  • 使用例如Build Pipeline Plugin创建基本的交付管道要简单得多;使用Pipeline,您的文件将更小,语法更短。如果您使用Job DSL创建Pipeline作业,我还没有看到它的主要价值,因为Jenkins Pipeline提供了开箱即用的模板功能。

最后,Jenkins Pipeline是目前Jenkins最流行的功能。看看Jenkins World 2016 agenda,你会看到约。 50%的会议涉及管道。没有Job DSL。


18
投票

我的感觉是理想的方法是同时使用两者。 Pipeline是新的原生Jenkins功能,可以将作业作为代码。但是,如果从头开始构建Jenkins,那么仍然需要创建这些作业。这意味着Jenkins不能100%真正编写脚本并使用代码构建。

你可以做的是使用JOB DSL来构建所有作业的骨架结构,然后使用管道来实现作业。这将允许您100%编写Jenkins脚本,减去要创建的初始种子作业。

也许,最终我们将能够使用管道来完全控制Jenkins(安全性,配置甚至插件)。但在那之前,我认为使用DSL和Pipeline是一种很好的方法。


2
投票

我的初步答案基于非常有限的经验:

  • 每个都使用不同的Groovy DSL。
  • Job DSL为您提供了一种根据Groovy脚本创建其他作业的方法。因此,如果您想要一组X相关的作业(例如管道),您将创建一个Job DSL作业,编写脚本,运行该作业,然后您将拥有这些X作业,再加上创建这些作业的作业。此时,只运行您直接创建的作业,而该作业创建的作业没有。 OOTB,这些工作并没有隐藏在多模块Maven作业中的Maven模块被隐藏的方式,但我知道至少有一种方法可以创建一个视图并将工作粘贴在那里。
  • 管道DSL只是在我尝试过的两个非常不同的环境中无限期挂起。 :'(这是一个已知的showstopper bug,据我所知 - 搜索,你会发现一些开放的bug票。任何人,运行你创建的管道作业实际上运行管道,而不是生成一堆像Job DSL这样的工作因此,运行管道作业的触发器是运行管道的触发器,而不仅仅是更新它定义的作业。
  • 从下载数字来看,管道似乎使用得更广泛。当然,Pipeline是Jenkins 2.0的默认功能,可能是最近下载量激增的原因。 Jenkins sure want you to use it的维护者。

所以回顾一下:Job DSL的DSL用于创建构成管道的作业,Pipeline Plugin的DSL定义了管道本身。

并回答你的问题:管道应该在未来得到更广泛的支持,对我来说看起来更直接(工作是工作,而不是metajob),并且似乎有更多的功能(包括工作流程)。我会使用它,除非你遇到上述showstopper的厄运,并找不到修复/解决方法。


2
投票

到目前为止,这里没有提到一个重要的区别:测试。使用job-dsl,可以在将DSL代码提交给SCM之前测试DSL代码:https://github.com/sheehan/job-dsl-gradle-example - 这允许本地测试套件在代码运行之前在DSL代码以及Jenkins上运行。据我所知,原生Pipeline方法中没有相应的东西。

© www.soinside.com 2019 - 2024. All rights reserved.