Почему действие Post Build не перезаписывает статус сборки в Jenkins? - PullRequest
1 голос
/ 21 февраля 2020

Я работаю над заданием Дженкинса, у которого есть тайм-аут с 1 повторной попыткой. Если время ожидания истекло, статус сборки будет ABORTED, а плагин Naginator будет повторять сборку.

Прервать сборку, если она застряла:

timeout

Я написал очень простой сценарий оболочки в выполнить оболочку для проверки механизма тайм-аута.

Выполнить оболочку:

#!/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

Редактируемый Секция триггера уведомления по электронной почте:

mail_config

Как вы можете видеть в случае повторного запуска сборки, кажется, что все правильно, и он должен перезаписать ABORTED статус до FAILURE статус. Но он закончил со статусом ABORTED.

Причина:

Мне нужен этот механизм, потому что я хочу отправить уведомление по электронной почте в разделе Пост сборки, НО только если повторная сборка не удалась. Это означает, что уведомление отправляется только по состоянию FAILURE (ABORTED не разрешено запускать почту). Вот почему я хочу изменить статус ABORTED на статус FAILURE, если повторная сборка не удалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...