1

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

工作A 工作B 工作C

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

我试图查看 multijob 插件本身,但没有找到任何方法。还尝试使用或不使用 groovy 搜索有关该主题的各种搜索,但没有发现任何有用的东西。

4

2 回答 2

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))

重要的是,该脚本将是一个使用脚本的“系统”(“执行系统 ​​Groovy 脚本”构建步骤),以便该脚本在 Jenkins JVM 的上下文中运行并且能够导入构建对象。

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

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

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

于 2013-07-22T13:20:10.460 回答
1

我不知道用你当前的工作结构做这件事的方法,但是如果你改变工作以便JobBtriggers ,那么你可以使用Parameterized Trigger PluginJobC实现你想要的。使用它,您可以按如下方式配置您的作业:

工作A

Post-Build Actions中,设置为触发JobB. 在添加参数下选择预定义参数并输入您要传​​递的参数。

工作B

Post-Build Actions中,设置为触发JobC. 然后,您可能希望通过多种方式传递参数(请注意,您可以结合这些不同的方法来传递参数)。

  • 要传递已定义的参数JobA,请在Add Parameters下选择Current Build Parameters
  • 要以JobB编程方式确定要传递给的参数JobCJobB请将它们输出到属性文件,然后通过从属性文件JobC中选择参数来传递这些参数,方法是在添加参数下选择参数,然后输入存储它们的文件。
  • 要在作业配置中手动输入更多参数,请在添加参数下选择预定义参数并输入要传递的参数。
于 2013-07-22T13:16:32.927 回答