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 в узлах.
- Может быть запущен процесс очистки ведомого или может быть запущен какой-то сиротский процесс, который вызывает разрыв соединения.
-Установите процесс очистки или убейте сиротский процесс, который потребляет память.
- Ключи SSH могут быть изменены между мастером и ведомыми.
-Указать снова отправить ключи ssh в подчиненные устройства через scp и снова нажать кнопку.
Попробуйте один раз, а также прочитайте приведенные ниже статьи для получения дополнительной справки.
Ответ 2
У меня была схожая проблема с подчиненными соединениями Jenkins в Linux. Они либо не начнут, либо не упадут вместо холостого хода.
Я обнаружил, что проблема связана с оболочкой Linux и тем, как она обрабатывает удаленные подключения.
После долгих усилий мое решение было:
- Создайте отдельного пользователя для Jenkins на ведущей и подчиненной машинах.
- Удалить (rm) файлы ~/.bashrc для этих пользователей Jenkins.
- Откажитесь от серверов, сделанных.
Существование файлов bashrc (даже пустых) привело к повреждению кластера. Это было единственное решение, которое сделало бы рабов федерацией в нашей среде. Документы не охватывали это.
Вы можете себе представить, что "много усилий" в основном отскакивало от всего кластера с различными комбинациями файлов bashrc, пока, наконец, просто не удалили их всех в расстройстве.
В enivronment были включены Centos и Jenkins CI с IBM ClearCase.
Надеюсь, это решение может помочь встряхнуть что-то в вашей проблеме.