Job DSL插件与管道插件

时间:2016-06-06 12:43:37

标签: jenkins jenkins-plugins jenkins-job-dsl

Job DSL PluginPipeline Plugin

之间的主要区别是什么?
  1. 都提供了编程创造就业机会的方法
  2. 哪个最适合用作前进?为什么?
  3. 如果两者具有相似的功能,它们是否有不同的用例?
  4. 由于Jenkins 2.0专注于Pipelines作为代码,这是否意味着job-dsl没有未来或者Pipeline Plugin是Job DSL插件的下一步?

4 个答案:

答案 0 :(得分:61)

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

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

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

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

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

答案 1 :(得分:19)

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

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

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

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:2)

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