一尘不染

詹金斯杀死了所有子进程

jenkins

我有一个运行bash脚本的詹金斯工作。

在bash脚本中,我有效地执行了两个操作,例如

java ApplicationA &
PID_A=$!
java ApplicationB
kill $PID_A

但是如果手动中止了作业,则该作业ApplicationA仍然有效(如ps -ef节点计算机上的a所示)。我无法使用陷印等等,因为如果jenkins发送9信号(陷印不适用于9),那将不起作用。

如果可以将此作业配置为简单地杀死它产生的 所有 进程,那将是理想的,我该怎么做?


阅读 201

收藏
2020-07-25

共1个答案

一尘不染

实际上,默认情况下,Jenkins具有一个名为 ProcessTreeKiller 的功能,该功能负责确保作业执行后 没有 剩余的进程在运行。

上面的链接说明了如何禁用该功能。您确定 因某种原因误将其禁用吗?

编辑:
根据作者的评论,基于有关禁用 ProcessTreeKiller
的信息,要实现相反的效果,必须将环境变量设置BUILD_ID为Jenkins作业的build id。这样,当 ProcessTreeKiller
查找正在运行的进程以杀死它时,它也会发现这一点

export BUILD_ID=$BUILD_ID

您还可以使用 Build Result Trigger
插件,配置第二个作业以清理应用程序,并将其配置为监视第一个作业的ABORTED状态作为触发器。

2020-07-25