我有一个运行bash脚本的詹金斯工作。
在bash脚本中,我有效地执行了两个操作,例如
java ApplicationA & PID_A=$! java ApplicationB kill $PID_A
但是如果手动中止了作业,则该作业ApplicationA仍然有效(如ps -ef节点计算机上的a所示)。我无法使用陷印等等,因为如果jenkins发送9信号(陷印不适用于9),那将不起作用。
ApplicationA
ps -ef
9
如果可以将此作业配置为简单地杀死它产生的 所有 进程,那将是理想的,我该怎么做?
实际上,默认情况下,Jenkins具有一个名为 ProcessTreeKiller 的功能,该功能负责确保作业执行后 没有 剩余的进程在运行。
上面的链接说明了如何禁用该功能。您确定 不 因某种原因误将其禁用吗?
编辑: 根据作者的评论,基于有关禁用 ProcessTreeKiller 的信息,要实现相反的效果,必须将环境变量设置BUILD_ID为Jenkins作业的build id。这样,当 ProcessTreeKiller 查找正在运行的进程以杀死它时,它也会发现这一点
BUILD_ID
export BUILD_ID=$BUILD_ID
您还可以使用 Build Result Trigger 插件,配置第二个作业以清理应用程序,并将其配置为监视第一个作业的ABORTED状态作为触发器。
ABORTED