Команда 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
Дженкинс больше не прекратит работу, как только произойдет ошибка.