2016-11-29 24 views
11

Jenkins niewolnik przechodzi w tryb offline podczas kompilacji. Jak mogę to naprawić, widziałem wiele powiązanych pytań w kwestiach SO i Jenkins, ale nikt nie dał rozwiązania.Jenkins slave przeszedł w tryb offline podczas kompilacji

o konfiguracji:

Jenkins wersja 1.651.1, Zuul wersja 2.1.1.dev393 z jednego mastera (Jenkins), Ubuntu dwóch podrzędnych (Ubuntu) każdy ma 16GB RAM Bieg opiera równolegle.

Jenkins master, devstack i oba slave slave są w tym samym zakresie IP.

Mam do czynienia z problemem, gdy jeden z niewolników kończy swoją budowę, a następnie proces java w obu niewolników zostaje zabity, a drugi niewolnik przechodzi w tryb offline.

Znalazłem ten problem, wymieniając procesy uruchomione w niewolnikach i zaobserwowałem, że proces java jest zabijany jednocześnie w obu slave, gdy jeden z slave ukończył swoją kompilację, a drugi slave nadal działa.

Poprzednio miałem ten problem, który został rozwiązany, przechodząc na JDK Oracle z Open JDK. Teraz niewolnicy używasz Java w Oracle 1.8.0_111 ale teraz coraz sam problem z Oracle java8 także

dzienniki budowy:

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 
+0

Czy przeglądałeś logi systemowe? Spróbuj sprawdzić, czy [ten problem i obejście] (https://github.com/scala/scala-jenkins-infra/issues/26) jest związany z twoją sprawą. –

+0

Widzieliśmy to bardzo regularnie, gdy mistrz był bardzo zajęty. Następnie przydzielamy mu więcej "CPU". Nie widziałem tego później (2 miesiące do tej pory). – Jayan

+0

W jaki sposób prowadzisz master? Doker? Jaka jest alokacja zasobów dla węzła głównego? – Jayan

Odpowiedz

5

niewolników przechodzi do trybu offline, albo dlatego

  1. Zadania uruchomione na niego zużywa więcej pamięci RAM niż ma ona lub brak pamięci.

- Jeśli tak jest, spróbuj mieć mniejszą liczbę executorów w slave lub mieć więcej CPU/RAM w węzłach.

  1. Proces czyszczenia podrzędnego może być uruchomiony lub proces osierocony może działać z tyłu, co powoduje przerwanie połączenia.

- Zatrzymaj proces czyszczenia lub zabij proces osierocony, który zużywa pamięć.

  1. Klucze SSH mogły zostać zmienione między master i slave.

-Potrzebne jest ponowne wysłanie kluczy ssh do urządzeń slave za pomocą scp i konieczne jest ponowne dotknięcie.

Proszę spróbuj raz, a także przeczytaj poniższe artykuły, aby uzyskać dodatkową pomoc.

+0

Próbowałem wszystkie te opcje, nic nie pomogło ... Inna rzecz powoduje mój problem ... – RMK

1

miałem podobny problem ze Jenkins połączeń podrzędnych w systemie Linux. Nie będą się uruchamiać ani upuszczać zamiast pracować na biegu jałowym.

Odkryłem, że problem dotyczył powłoki Linuxa i sposobu, w jaki obsługuje połączenia zdalne.

Po wysiłku, moje rozwiązanie było:

  • Utwórz osobny użytkownika o Jenkins na maszynach master i slave.
  • Usuń (rm) pliki ~/.bashrc dla tych użytkowników Jenkinsa
  • Odbij serwery, gotowe.

Istnienie plików bashrc (nawet pustych) spowodowało uszkodzenie klastra. To było jedyne rozwiązanie, które sprawiłoby, że niewolnicy zrzeszali się w naszym środowisku. Dokumenty tego nie wyjaśniały.

Można sobie wyobrazić, że "duży wysiłek" polegał zasadniczo na odbijaniu całego klastra za pomocą różnych kombinacji plików bashrc, aż wreszcie ostatecznie usunięto je wszystkie z frustracji.

Środowisko to Centos i Jenkins CI zintegrowane z IBM ClearCase.

Mam nadzieję, że to rozwiązanie może pomóc w rozwiązaniu problemu.