Jenkins - 只要其中一个并行的程序失败,就关闭Jenkins的工作

时间:2014-11-07 11:47:34

标签: perl jenkins parallel-processing

我在Jenkins中并行运行两个Perl脚本

some shell commands
perl script 1 &
perl script 2 &
wait
some more shell commands

如果其中一个perl脚本在执行过程中失败,则作业会一直等到另一个脚本运行(因为它在后台并行执行)。

我希望只要其中一个脚本失败就停止工作,而不是通过完成其他脚本的执行来浪费时间。

请帮忙。

2 个答案:

答案 0 :(得分:0)

通常使用Jenkins,您可以将并行步骤作为单独的作业(或有时已知的项目)而不是作业中的步骤运行。这样就可以让步骤在不同的从机上并行运行,并将作业的输出保存在一个单独的位置。

然后你将有一个控制工作来运行其他部分。

我喜欢这类Multijob插件。

有些替代方案可能更适合,例如Build Flow Plugin使用DSL来描述您要运行的工作

答案 1 :(得分:0)

您为SIGCHLD设置了一个信号处理程序,这是一个在子进程退出时始终传递给父进程的信号。我不知道有哪种机制可以查看退出的子进程,但是您可以保存子进程进程标识符,并在收到SIGCHLD时将其全部删除:

some shell commands
perl script 1 &
pid1=$!
perl script 2 &
pid2=$!
trap "kill $pid1 $pid2" CHLD
wait
some more shell commands

上面的脚本的缺点是,无论子进程的退出状态如何,它都将终止其他脚本。如果您愿意,可以在陷阱中添加检查退出状态。子过程可以是例如如果成功,则创建一些临时文件,陷阱可以检查文件是否存在。