如果上游作业停止,如何杀死下游作业?

问题描述:

我有一个能够动态触发许多下游作业的父作业。如果上游作业停止,如何杀死下游作业?

我使用python代码生成要触发的作业列表,将其写入属性文件,使用EnvInject插件注入文件,然后使用作业列表变量(逗号分隔)变量的“参数化触发器插件”发起工作(如果有人知道这样做的更简单的方法,我很乐意听到这一点!)。

它的效果很好,除了杀死父作业,触发的作业继续运行,并且我还希望它们在杀死父母时死掉。

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

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

在此先感谢。

+0

你是如何杀死父母的工作?至少在Linux中可以设置信号处理程序... – aychedee 2013-02-21 18:30:14

而不是杀死工作,有另一项工作,程序化地终止所有必需的工作。您可以重复使用相同的属性文件来知道哪些所有作业被杀死。你可以使用groovy脚本来终止工作。

为了赶上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在你的情况中是最明显的。所以这只是一个确定什么信号杀死父母并处理它的问题。