Можно ли настроить Jenkins на отказ от работы, если подготовка агента занимает слишком много времени? - PullRequest
0 голосов
/ 20 марта 2019

Я работаю с плагином Jenkins AWS EC2 , который порождает узлы EC2 для выполнения заданий Jenkins.Есть несколько случаев, когда этот плагин может зависать бесконечно, ожидая, когда будет предоставлен узел.Например, если для проекта требуется Python, но в образе EC2 нет Python, Дженкинс раскрутит узел, не сможет запустить задание, раскрутит другой узел, не сможет запустить задание, раскрутит другой узел ...

Между тем, работа зависает навсегда, Дженкинс наращивает счет Amazon, и вывод консоли выглядит следующим образом:

[Pipeline] Start of Pipeline
[Pipeline] node
Still waiting to schedule task
‘Jenkins’ doesn’t have label ‘ec2worker’

Обычно решение состоит в том, чтобы просто настроитьОблако EC2 правильно в первую очередь, но легче сказать, чем сделать.Легко представить, например, что кто-то, скажем, добавляет node.js в качестве зависимости проекта без обновления образа EC2, а затем Дженкинс отправляется в гонку, пытаясь выставить счет AWS за высокий балл ...

ИдеальноЯ мог бы настроить плагин на ограничить количество попыток инициализации перед выходом, но для этого нет опции.Существует возможность ограничить общее количество выделенных узлов , но поскольку каждый узел завершается после того, как он считается неподходящим, Дженкинс считает, что существует только один активный узел.Т.е. число узлов колеблется между 0 и 1, поскольку Дженкинс создает узел, отбрасывает его, а затем создает другой.

Так что я ищу обходной путь.Есть ли способ настроить Jenkins на сбой сборки на этапе подготовки?Могу ли я ограничить время, необходимое для создания узла, не ограничивая общее время всей работы?

Предпочтительно, чтобы эта конфигурация была общесистемной.Но если его нужно отправить в каждый файл конфигурации проекта, я представляю, что он выглядит примерно так:

pipeline {
    agent {
        timeout(5m) {
            label 'ec2worker'
        }
    }
}

Есть ли функция или плагин Jenkins, который делает что-то подобное?

1 Ответ

0 голосов
/ 26 марта 2019

В конце концов я не смог найти в Jenkins ничего, что бы делало то, что я хотел - хотя в плагине Jenkins EC2, похоже, есть билет для поддержки этой недостающей функции.

Я решил проблему в AWS с помощью лямбды. Лямбда запускается всякий раз, когда Дженкинс уничтожает экземпляр, и по этому событию лямбда вычисляет, как долго экземпляр был жив. Если это не было достаточно долго (меньше, чем период простоя, которого обычно ожидает узел), то Дженкинс должен зависнуть, и лямбда убивает работу.

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