Jenkins参数化了重用具有相同参数的旧构建的作业

时间:2017-03-14 11:43:14

标签: jenkins jenkins-plugins jenkins-scriptler

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

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

手头的问题:每个顶级作业都以多个参数启动,只有这些参数中的一个被传递给子作业。对于某些子作业,参数与前一段时间相同,当最后一次从该顶级作业调用子作业时,但我们的顶级脚本不知道这一点。 从本质上讲,我们会浪费构建时间,使用相同的参数再次构建子作业。

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

这样的选项
  • 如果相同的参数(和配置不变),请不要重建作业。

将执行以下步骤:

  1. 将给定作业的所有保留构建的构建参数与当前参数进行比较。
  2. 如果作业配置在找到的作业构建后未更改,请将环境变量设置为指向上面找到的旧作业。
  3. 如果找不到作业或者自找到作业构建后作业配置已更改,请照常执行构建。
  4. 很遗憾它似乎不存在,也无法找到提供我所寻求的功能的替代插件。

    Groovy救援? 这就是我猜Scriptler Plugin和Groovy脚本会派上用场的原因,因为它允许我在子作业中执行检查,然后设置一个我可以在{{3中使用的环境变量要像往常一样执行构建,要么使用Conditional BuildStep Plugin跳过构建并设置构建环境变量。

    我的编程问题:我是Groovy的新手,也是JAVA的新手。不过,我有很多其他(汇编,C和脚本)编程经验。我已经搜索了全部的示例脚本,但没有发现任何类似于我想在这里做的事情。任何有关如何执行此操作的提示,包括对功能的替代处理,都将受到高度赞赏!

1 个答案:

答案 0 :(得分:2)

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

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

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

相关问题