如何在上游任务停止时终止下游任务?

3 投票
2 回答
1645 浏览
提问于 2025-04-17 16:38

我有一个主任务,它会动态触发很多下游任务。

我用Python代码生成要触发的任务列表,然后把这个列表写入一个属性文件。接着,我使用EnvInject插件把这个文件注入进去,然后用“参数化触发插件”来启动这些任务(如果有人知道更简单的方法,我也很想听听!)。

这个方法效果很好,但有个问题,就是当我终止主任务时,已经触发的下游任务还在继续运行。我希望在终止主任务时,这些下游任务也能一起停止。

有没有什么插件或者方法可以实现这个?也许可以在任务被终止时调用一个钩子?

补充说明:抱歉让人困惑,我之前没有说清楚我所说的“终止”任务是什么意思。我是指在Jenkins界面上点击红色的“x”按钮,而不是Unix信号。

提前谢谢大家。

2 个回答

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是最明显的一个。所以,你只需要弄清楚是什么信号让父进程被杀掉,然后处理这个信号就可以了。

2

与其直接结束一个任务,不如创建另一个任务,专门用来程序化地结束所有需要结束的任务。你可以重复使用同一个属性文件,来了解哪些任务需要被结束。你还可以用groovy脚本来结束这些任务。

撰写回答