0

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

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

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

在一个完美的世界中,参数化触发器插件将有一个选项,如

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

这将执行以下步骤:

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

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

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

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

4

1 回答 1

2

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

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

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

于 2017-03-15T07:57:23.637 回答