Jenkins slave отключился во время сборки

Дженкинс подчиняется во время сборки. Как я могу это исправить, я видел много связанных вопросов в SO и Jenkins, но никто не давал решения.

Моя конфигурация:

Версия Jenkins 1.651.1, Zuul версии 2.1.1.dev393 с одним мастером Дженкинса (Ubuntu), 2 подчиненных устройства (Ubuntu) имеют 16 ГБ оперативной памяти Запуск сборки выполняется параллельно.

Мастер Jenkins, devstack и оба подчиненных устройства nodepool находятся в одном и том же диапазоне IP.

Я столкнулся с проблемой, когда один из подчиненных завершает свою сборку, тогда процесс java в обоих подчиненных будет убит, а другой подчиненный переходит в автономный режим.

Я нашел эту проблему, указав процессы, выполняемые в подчиненных устройствах, и заметил, что процесс java убивается одновременно в обоих ведомых устройствах, когда один из ведомых завершил свою сборку, а другой подчиненный все еще выполняет сборку.

Раньше у меня была эта проблема, и это было разрешено, переключившись на Oracle JDK из Open JDK. Теперь ведомые используют oracle java 1.8.0_111, но теперь мы получаем ту же проблему с Oracle-java8 также

Журналы сборки:

01:42:07 Slave went offline during the build
01:42:07 ERROR: Connection was broken: java.io.IOException: Unexpected termination of the channel
01:42:07    at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:50)
01:42:07 Caused by: java.io.EOFException
01:42:07    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2351)
01:42:07    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2820)
01:42:07    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
01:42:07    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:302)
01:42:07    at hudson.remoting.ObjectInputStreamEx.<init>(ObjectInputStreamEx.java:48)
01:42:07    at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(    AbstractSynchronousByteArrayCommandTransport.java:34)
01:42:07    at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:48)
01:42:07 
01:42:07 Build step 'Execute shell' marked build as failure 

Ответ 1

Ведомые устройства не работают, потому что

  • Выполняемые на нем задания потребляют больше оперативной памяти, чем или не осталось памяти.

-Если это так, попробуйте иметь меньшее количество исполнителей в подчиненных устройствах или иметь большее количество CPU/RAM в узлах.

  1. Может быть запущен процесс очистки ведомого или может быть запущен какой-то сиротский процесс, который вызывает разрыв соединения.

-Установите процесс очистки или убейте сиротский процесс, который потребляет память.

  1. Ключи SSH могут быть изменены между мастером и ведомыми.

-Указать снова отправить ключи ssh в подчиненные устройства через scp и снова нажать кнопку.

Попробуйте один раз, а также прочитайте приведенные ниже статьи для получения дополнительной справки.

Ответ 2

У меня была схожая проблема с подчиненными соединениями Jenkins в Linux. Они либо не начнут, либо не упадут вместо холостого хода.

Я обнаружил, что проблема связана с оболочкой Linux и тем, как она обрабатывает удаленные подключения.

После долгих усилий мое решение было:

  • Создайте отдельного пользователя для Jenkins на ведущей и подчиненной машинах.
  • Удалить (rm) файлы ~/.bashrc для этих пользователей Jenkins.
  • Откажитесь от серверов, сделанных.

Существование файлов bashrc (даже пустых) привело к повреждению кластера. Это было единственное решение, которое сделало бы рабов федерацией в нашей среде. Документы не охватывали это.

Вы можете себе представить, что "много усилий" в основном отскакивало от всего кластера с различными комбинациями файлов bashrc, пока, наконец, просто не удалили их всех в расстройстве.

В enivronment были включены Centos и Jenkins CI с IBM ClearCase.

Надеюсь, это решение может помочь встряхнуть что-то в вашей проблеме.