我有一个形式的多工作结构:
工作A 工作B 工作C
我希望其运行的部分 JobB 将在 JobA 中设置参数,以便在 JobB 完成后 JobA 将能够将其传递给 JobC。
我试图查看 multijob 插件本身,但没有找到任何方法。还尝试使用或不使用 groovy 搜索有关该主题的各种搜索,但没有发现任何有用的东西。
我已经通过使用 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.
脚本中的所有名称。
我的目标是编写和发布一个可以做到这一点的插件,因为我认为它在许多情况下是一个有用的功能。
我不知道用你当前的工作结构做这件事的方法,但是如果你改变工作以便JobB
triggers ,那么你可以使用Parameterized Trigger PluginJobC
实现你想要的。使用它,您可以按如下方式配置您的作业:
工作A
在Post-Build Actions中,设置为触发JobB
. 在添加参数下选择预定义参数并输入您要传递的参数。
工作B
在Post-Build Actions中,设置为触发JobC
. 然后,您可能希望通过多种方式传递参数(请注意,您可以结合这些不同的方法来传递参数)。
JobA
,请在Add Parameters下选择Current Build Parameters。JobB
编程方式确定要传递给的参数JobC
,JobB
请将它们输出到属性文件,然后通过从属性文件JobC
中选择参数来传递这些参数,方法是在添加参数下选择参数,然后输入存储它们的文件。