Дженкинс убивает все дочерние процессы

У меня есть работа jenkins, которая запускает bash script.

В bash script я эффективно выполняю два действия, что-то вроде

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

но если задание вручную прервано, ApplicationA остается в живых (как видно на ps -ef на машине node). Я не могу использовать захват и т.д., Потому что это не сработает, если jenkins отправит сигнал 9 (захват не работает для 9).

Было бы идеально, если бы это задание можно было сконфигурировать, чтобы просто убить процессы all, которые он порождает, как я могу это сделать?

Ответы

Ответ 1

Фактически, по умолчанию у Jenkins есть функция ProcessTreeKiller, которая отвечает за то, чтобы убедиться, что есть no обрабатывается слева после выполнения задания.

В приведенной выше ссылке объясняется, как отключить эту функцию. Вы уверены, что у вас не есть что-то по ошибке по ошибке?

Edit:
Следуя комментариям автора, на основе информации об отключении ProcessTreeKiller, для достижения обратного необходимо установить переменную среды BUILD_ID в идентификатор сборки задания Jenkins. Таким образом, когда ProcessTreeKiller просматривает запущенные процессы, чтобы убить, он также найдет это

export BUILD_ID=$BUILD_ID

Вы также можете использовать плагин Build Result Trigger, настроить второе задание для очистки ваших приложений и настроить его для мониторинга первое задание для ABORTED в качестве триггера.