【问题标题】:Jenkins parameterized job that reuses old build with same parametersJenkins 参数化作业,重用具有相同参数的旧版本
【发布时间】:2017-03-14 11:43:14
【问题描述】:

背景: 我们有许多 Jenkins 顶级作业,它们使用(和共享)其他作业作为子程序。为了控制整个流程,我们使用 Jenkins Parameterized Trigger Plugin

然后,顶级作业从子构建中收集测试报告、构建报告等,并方便地一次性发布它们。它工作得非常好。

手头的问题:每个顶级作业都以许多参数开始,并且只有其中的一部分被传递给子作业。对于某些子作业,参数与前一段时间相同,即上次从该顶级作业调用子作业时,但我们的顶级脚本不知道这一点。 本质上,我们浪费了构建时间,使用相同的参数再次构建子作业。

在一个完美的世界中 Parameterized Trigger Plugin 会有一个类似

的选项
  • 如果参数相同(且配置未更改),请勿重建作业。

它将执行以下步骤:

  1. 将给定作业的所有保留构建的构建参数与当前参数进行比较。
  2. 如果自构建找到的作业后作业配置未更改,请将环境变量设置为指向上面找到的旧作业。
  3. 如果在构建找到的作业后未找到作业或作业配置已更改,请照常执行构建。

不幸的是它似乎不存在,我也找不到提供我想要的功能的替代插件。

Groovy 来拯救? 这就是我猜Scriptler Plugin 和 Groovy 脚本会派上用场的地方,因为它可以让我在子作业中执行检查,然后设置我可以在Conditional BuildStep Plugin 中使用的环境变量像往常一样执行构建,或者跳过构建并使用 EnvInject Plugin 设置构建环境变量。

我的编程问题:我是 Groovy 和 JAVA 的新手。不过,我还有很多其他(汇编、C 和脚本)编程经验。我已经搜索了所有的示例脚本,但没有找到任何与我在这里想要做的远程相似的东西。任何有关如何执行此操作的提示,包括替代功能,将不胜感激!

【问题讨论】:

标签: jenkins jenkins-plugins jenkins-scriptler


【解决方案1】:

您已经朝着正确的方向前进。由于没有现成的插件可用,实现自定义解决方案的最佳方式是使用 Groovy

从概念上讲,最好在触发方(即在顶级工作中)实施“建或不建”决策。这是因为一旦触发了子作业,就很难(也很尴尬)阻止其实际执行或在参数相同的情况下重新使用以前的结果。 (后者基本上意味着为您的子作业实现memoization;这是一个有趣的功能——AFAIK 没有插件,但它可以通过子作业中的一些脚本来实现)。

关于您的编程问题:就个人而言,我也是从更嵌入式/C-ish 背景开始的。根据我的经验,如果您打算与 Jenkins 合作得更紧密、更长久,那么学习 Groovy 肯定会有所收获。我最初不愿意学习“只是另一种脚本语言”,但是 Groovy 有一些非常有趣的概念,并且 您将能够以比仅使用插件或外部更灵活、强大和高效的方式控制 Jenkins REST/CLI API。您也将减少对查找和运行过多插件的依赖,这是管理方面的一个优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-01
    • 2013-12-22
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多