2

我有一个动态触发许多下游作业的父作业。

我使用python代码生成要触发的作业列表,将其写入属性文件,使用EnvInject插件注入文件,然后使用带有作业列表变量(逗号分隔)变量的“参数化触发器插件”来启动作业(如果有人知道更简单的方法,我也很想听听!)。

它工作得很好,除了杀死父作业时,触发的作业继续运行,我希望它们在杀死父作业时也死掉。

有没有插件或方法来实现这个?也许是在工作被杀死时调用的钩子?

编辑:对不起,我不清楚我的意思是“杀死”这份工作。我的意思是单击 Jenkins gui 中的红色“x”按钮,而不是 Unix 信号。

提前致谢。

4

2 回答 2

2

与其终止工作,不如让另一个工作以编程方式终止所有必需的工作。您可以重用相同的属性文件来了解要终止的所有作业。您可以使用 groovy 脚本来终止作业。

于 2013-02-21T16:09:33.917 回答
1

要在进程中捕获 SIGTERM,您可以使用以下代码(特定于 unix):

import signal

def kill_children(*args, **kwargs):
    # some code that uses the stored list of children procs to kill them

signal.signal(signal.SIGTERM, kill_children)

进程可以接收许多其他信号。SIGKILL 在您的情况下是最明显的。因此,只需找出杀死父母并处理它的信号即可。

于 2013-02-21T18:36:49.423 回答