Команда Jenkins и kill в скрипте делает сборку неудачной

Из-за некоторых проблем с зависанием процесса python (yandex-tank) во время процесса сборки в Jenkins (после которого сборка не может быть остановлена), мне нужно остановить этот проблемный процесс с помощью какой-либо дополнительной команды kill с timeout или самой командой timeout:

timeout $TIMEOUT yandex-tank-jmeter -i -o "jmeter.jmx=$WORKSPACE/$TEST_PLAN"

timeout отправляет сигнал по умолчанию (15), но после этого сборка переходит в состояние FAILED.

Есть ли обходной путь или специальный сигнал убийства, чтобы сделать успешные сборки?

2 ответа

Решение

Вы пробовали переопределение кода выхода вручную?

timeout $TIMEOUT yandex-tank-jmeter -i -o "jmeter.jmx=$WORKSPACE/$TEST_PLAN"; RES=$?
//If  the  command timed out, then RES equals 124.
...
//at the end of job scenario:
if [ $RES -eq 124 ]; then RES=0;
fi
exit $RES  

Согласно документации Jenkins для шага "Выполнение оболочки":

По умолчанию оболочка вызывается с опцией "-ex".

Поэтому Дженкинс помещает весь код оболочки в файл сценария оболочки, находящийся в каталоге temp, что-то вроде /tmp/sh/jenkins45723947385985.sh, а затем выполняет его следующим образом:

/bin/sh -xe /tmp/sh/jenkins45723947385985.sh

Это можно увидеть в консольном выводе задания.

Опция e в -xe означает, что оболочка завершит работу, как только возникнет ошибка. Чтобы изменить это поведение, добавьте настраиваемую строку shebang в начало сценария оболочки Jenkins, например

#!/bin/sh -x

Дженкинс больше не прекратит работу, как только произойдет ошибка.

Другие вопросы по тегам