作业 DSL 插件与管道插件

Job DSL Plugin Vs Pipeline Plugin

Job DSL Plugin and Pipeline Plugin

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

我根据非常有限的经验初步回答:

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

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

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

我在这两个方面都有丰富的经验。简明扼要的回答是,Job DSL 存在的时间更长,是 Netflix 为 "coding" Jenkins 提供的开源解决方案。它允许您在编写 Jenkins 作业脚本时引入逻辑和变量,通常人们会使用这些作业为特定项目形成某种 "pipeline"。作为启用作业模板和脚本的常用方法,该插件获得了相当多的关注。

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 "seed" 作业 DSL,因为管道 就是作业本身 。使用 Job DSL,它是 只是一个 创建其他作业 的脚本。
  • 使用 Pipeline,您拥有参数化手动输入步骤等功能,允许您在管道中指定逻辑中游
  • 可以的逻辑 包含在作业 DSL 中的仅限于创建作业 他们自己;而使用管道,您可以直接包含逻辑 在工作中。
  • Job DSL 使用 Build Pipeline Plugin 来创建基本的交付管道要困难得多;使用 Pipeline 你的文件会更小,语法更短。如果您使用 Job DSL 来创建管道作业,考虑到 Jenkins 管道开箱即用的模板功能,我还没有看到它的主要价值。

最后,Jenkins Pipeline 是目前 Jenkins 最流行的功能。查看 Jenkins World 2016 agenda,您会看到大约。 50% 的会话涉及流水线。 None 用于工作 DSL。

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

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

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

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