在上游作业中设置参数

时间:2013-07-21 09:08:34

标签: groovy jenkins hudson

我有一个形式的多工作结构:

职吧    JOBB    JobC

我希望它的部分运行JobB将在JobA中设置参数,所以在JobB完成后,JobA将能够将它传递给JobC。

我试图查看multijob插件本身,但没有找到任何办法。 也尝试使用或不使用groovy搜索关于主题的各种搜索,但没有找到任何有用的信息。

2 个答案:

答案 0 :(得分:4)

我通过使用groovy脚本解决了这个问题:

def my_run = Thread.currentThread().executable
def my_parent_run = my_run.getCause(hudson.model.Cause.UpstreamCause).getUpstreamRun()

def preExistingAction = my_parent_run .getAction(hudson.model.ParametersAction.class)
my_parent_run.getActions().remove(preExistingAction)
def params = preExistingAction ?. iterator() ?. toList() ?: []
params << new hudson.model.StringParameterValue('TEST_PARAM', 'FOO')
my_parent_run.addAction(new hudson.model.ParametersAction(params))

使用脚本(“Execute System Groovy Scripts”构建步骤)将脚本作为“系统”非常重要,这样脚本就可以在Jenkins JVM的上下文中运行,并且能够导入Build对象。 / p>

所以JobB运行这个脚本,然后当它完成这个构建步骤时,JobA现在有一个名为“TEST_PARAM”的参数,其值为“FOO”,它可以通过任何标准方式轻松传递给JobC。

请注意,我使用的是完全限定名称,但您可以import hudson.model.*删除脚本中的所有hudson.modle.

我的目标是编写和发布一个可以做到这一点的插件,因为我认为在许多情况下它是一个有用的功能。

答案 1 :(得分:1)

我不知道如何使用您当前的工作结构,但是如果您更改工作以便JobB触发JobC,那么您可以使用{{实现您想要的目标3}}。使用此功能,您可以按如下方式配置作业:

<强>职吧

构建后操作中,设置为{em>触发参数化构建 JobB。在添加参数下,选择预定义参数,然后输入要传递的参数。

<强> JOBB

构建后操作中,设置为{em>触发参数化构建 JobC。然后,您可以通过多种方式传递参数(请注意,您可以将这些不同的方法组合在一起传递参数)。

  • 要传递JobA已定义的参数,请在添加参数下选择当前构建参数
  • 要以JobB以编程方式确定要传递给JobC的参数,让JobB将其输出到属性文件,然后通过选择将这些参数传递给JobC 添加参数下的属性文件中的参数,并输入存储它们的文件。
  • 要在作业配置中手动输入更多参数,请在添加参数下选择预定义参数,然后输入要传递的参数。