Я работаю над заданием Дженкинса, у которого есть тайм-аут с 1 повторной попыткой. Если время ожидания истекло, статус сборки будет ABORTED
, а плагин Naginator
будет повторять сборку.
Прервать сборку, если она застряла:
Я написал очень простой сценарий оболочки в выполнить оболочку для проверки механизма тайм-аута.
Выполнить оболочку:
#!/bin/bash
echo "START"
sleep 60
echo "1 min"
sleep 60
echo "2 min"
sleep 60
echo "3 min"
sleep 60
echo "4 min"
sleep 60
echo "5 min"
sleep 60
echo "6 min"
sleep 60
echo "7 min"
sleep 60
echo "8 min"
sleep 60
echo "9 min"
sleep 60
echo "10 min"
sleep 60
echo "11 min"
sleep 60
echo "12 min"
sleep 60
echo "13 min"
echo "STOP"
И у меня есть Post build action
, где я хочу обнаружить повторные сборки , Я использую переменную окружения NAGINATOR_COUNT
, которая устанавливается, только если повторный запуск уже произошел. Этот скрипт работает как положено. И я установил опцию Escalate script execution status to job status
, это означает, что статус Post build action
должен перезаписывать «первоначальный» статус сборки. У меня было несколько попыток, и это работает в случае SUCCESS -> FAILURE
, но это не работает в случае ABORTED -> FAILURE
.
Задача после сборки:
#!/bin/bash
echo "START POST BUILD TASK"
export NAGINATOR_COUNT=${NAGINATOR_COUNT:-NO_RETRY}
echo "NAGINATOR_COUNT=${NAGINATOR_COUNT}"
if [[ ${NAGINATOR_COUNT} -eq 1 ]]; then
echo "NAGINATOR_COUNT variable is 1. Retry was happened"
exit 1
fi
echo "NAGINATOR_COUNT variable is NOT 1. Retry wasn't happened"
Вывод повторного запуска задания NON:
2020-02-21 07:40:49 [test_job] $ /bin/bash /tmp/jenkins5602046862350636731.sh
2020-02-21 07:40:49 START
2020-02-21 07:41:49 1 min
2020-02-21 07:42:49 2 min
2020-02-21 07:43:49 Scheduled restart of the build (up to 1 times).
2020-02-21 07:43:49 Build timed out (after 3 minutes). Marking the build as aborted.
2020-02-21 07:43:49 /tmp/jenkins5602046862350636731.sh: line 8: 14915 Terminated sleep 60
2020-02-21 07:43:49 3 min
2020-02-21 07:43:49
Build was aborted
2020-02-21 07:43:49 Performing Post build task...
2020-02-21 07:43:49 Match found for :Build timed out : True
2020-02-21 07:43:49 Logical operation result is TRUE
2020-02-21 07:43:49 Running script : #!/bin/bash
2020-02-21 07:43:49 [test_job] $ /bin/bash /tmp/jenkins3154001743586365902.sh
2020-02-21 07:43:49 START POST BUILD TASK
2020-02-21 07:43:49 NAGINATOR_COUNT=NO_RETRY
2020-02-21 07:43:49 NAGINATOR_COUNT variable is NOT 1. Retry wasn't happened
2020-02-21 07:43:50 POST BUILD TASK : SUCCESS
2020-02-21 07:43:50 END OF POST BUILD TASK : 0
2020-02-21 07:43:50 No emails were triggered.
2020-02-21 07:43:50 Finished: ABORTED
Выход повторного запуска задания:
2020-02-21 07:43:50 [test_job] $ /bin/bash /tmp/jenkins1787517070120788068.sh
2020-02-21 07:43:50 START
2020-02-21 07:44:50 1 min
2020-02-21 07:45:52 2 min
2020-02-21 07:46:50 Scheduled restart of the build (up to 1 times).
2020-02-21 07:46:50 Build timed out (after 3 minutes). Marking the build as aborted.
2020-02-21 07:46:50 /tmp/jenkins1787517070120788068.sh: line 8: 15179 Terminated sleep 60
2020-02-21 07:46:50 3 min
2020-02-21 07:46:50
Build was aborted
2020-02-21 07:46:50 Performing Post build task...
2020-02-21 07:46:50 Match found for :Build timed out : True
2020-02-21 07:46:50 Logical operation result is TRUE
2020-02-21 07:46:50 Running script : #!/bin/bash
2020-02-21 07:46:50 [test_job] $ /bin/bash /tmp/jenkins218780675757116076.sh
2020-02-21 07:46:50 START POST BUILD TASK
2020-02-21 07:46:50 NAGINATOR_COUNT=1
2020-02-21 07:46:50 NAGINATOR_COUNT variable is 1. Retry was happenned
2020-02-21 07:46:50 POST BUILD TASK : FAILURE
2020-02-21 07:46:50 END OF POST BUILD TASK : 0
2020-02-21 07:46:50 ESCALATE FAILED POST BUILD TASK TO JOB STATUS
2020-02-21 07:46:50 No emails were triggered.
2020-02-21 07:46:50 Finished: ABORTED
Редактируемый Секция триггера уведомления по электронной почте:
Как вы можете видеть в случае повторного запуска сборки, кажется, что все правильно, и он должен перезаписать ABORTED
статус до FAILURE
статус. Но он закончил со статусом ABORTED
.
Причина:
Мне нужен этот механизм, потому что я хочу отправить уведомление по электронной почте в разделе Пост сборки, НО только если повторная сборка не удалась. Это означает, что уведомление отправляется только по состоянию FAILURE
(ABORTED
не разрешено запускать почту). Вот почему я хочу изменить статус ABORTED
на статус FAILURE
, если повторная сборка не удалась.