8

Używamy Jenkinsa do naszego systemu budowania CI. Używamy również "współbieżnych kompilacji", aby Jenkins samodzielnie budował każdą zmianę. Oznacza to, że często mamy jednocześnie 5 lub 6 kompilacji tego samego zadania. Aby to uwzględnić, mamy 4 niewolników, każdy z 12 wykonawcami.Jak zmodyfikować zachowanie równoważenia obciążenia, którego Jenkins używa do sterowania urządzeniami slave?

Problem polega na tym, że Jenkins tak naprawdę nie balansuje pomiędzy swoimi niewolnikami. Próbuje zbudować zadanie na tym samym urządzeniu podrzędnym, na którym wcześniej było wbudowane (prawdopodobnie w celu zmniejszenia synchronizacji czasu z kontrolą źródła). Jest to problem, ponieważ Jenkins zbuduje wszystkie 6 wystąpień naszej kompilacji na tym samym niewolniku (lub częściej między 2 niewolnikami). Jedna maszyna komplikuje się i działa bardzo wolno, podczas gdy reszta z nich siedzi bezczynnie.

Czy istnieje wtyczka lub coś, co zmienia zachowanie równoważenia obciążenia, którego używa Jenkins do kontrolowania swoich niewolników?

Odpowiedz

1

Jeśli nie możesz znaleźć wtyczki, który robi to automatycznie, oto pomysł co można zrobić:

  • Install Node Label Parameter plugin
  • Dodaj niewolnik parametr do pracy
  • Zastrzeganie zadania do uruchom na ${SLAVE}
  • Dodaj zadanie wyzwalacza, które wykona następujące czynności:

    • Przeanalizuj rozkład obciążenia za pomocą skryptu Groovy Script i zdecyduj, który węzeł rozpocznie następną kompilację.
    • Wyślij kompilację do tego węzła za pomocą Parametertized Trigger plugin , przypisując odpowiednią wartość parametrowi SLAVE.

W celu analizy rozkładu obciążeń trzeba zainstalować Groovy plugin i zapoznania się z Jenkins Main Module API. Oto some useful initial pointers.

+0

nie wydaje się być plugin, który robi to (że mogę znaleźć). Chociaż ta sugestia jest o wiele bardziej "zaangażowana" niż użycie samej wtyczki, wygląda na naszą najlepszą opcję! –

3

Jeśli Twoje maszyny budujące nie mogą wygodnie obsługiwać więcej niż 1 kompilacji, dlaczego chcesz skonfigurować je z 12 executorami? Jeśli tak jest rzeczywiście, powinieneś zmniejszyć liczbę executorów do 1. Mój Jenkins ma 30 niewolników, każdy z 1 wykonawcą.

+0

Nasi niewolnicy Jenkins zajmują się wieloma zadaniami, z których jednym jest skompilowanie naszego kodu. Niewolnicy mają 12 wykonawców, ponieważ mogą zrobić 12 rzeczy na raz (kompilacje są "największe" z tych rzeczy). Może nawet uruchamiać 4-5 buildów, po prostu spowalnia działanie (i chcemy, aby opinie o tych kompilacjach były jak najszybciej). Przez zredukowanie tych niewolników do 1 executora, przez większość dnia będziemy mieli 15 rdzeni bezczynności, a nie bardzo wydajne wykorzystanie zasobów. –

12

Mieliśmy do czynienia z podobnym problemem. Dlatego stworzyłem wtyczkę, która zmienia moduł równoważenia obciążenia w Jenkins, aby wybrać węzeł, który aktualnie ma najmniejsze obciążenie - https://wiki.jenkins-ci.org/display/JENKINS/Least+Load+Plugin

Wszelkie uwagi są mile widziane.

+0

Świetnie, dzięki!Ostatnia data kompilacji wtyczki to obecnie "27 czerwca 2013". Czy jest kompatybilny z nowszymi wersjami Jenkins, np. 1.625.3? – t0r0X

+0

To powinno być obecnie używam go z 1.625.2 – bstick12

+0

dzięki jeszcze raz, spróbuję! – t0r0X

Powiązane problemy