2012-01-04 4 views
5

Mam wiele różnych zadań w Jenkins, podzielonych na projekty z własnymi "potokami" budowania/testowania/analizy. Większość tych zadań jest w rzeczywistości zdalnymi komendami, a nie wbudowanymi kompilacjami.Wiele kolejek kompilacji w Jenkins

Jednak Jenkins po wyjęciu z pudełka obsługuje tylko jedną kolejkę dla wszystkich kompilacji. Chcę zdefiniować jedną kolejkę dla każdego projektu (lub widoku).

Jak to zrobić?

Odpowiedz

4

O ile mi wiadomo, nie jest to możliwe bez zmiany kodu Jenkinsa, ale myślę, że można osiągnąć ten sam cel przy minimalnej konserwacji przy użyciu build slaves. Różne wersje mogą działać jednocześnie na niewolnikach, a nawet na tym samym niewolniku, jeśli zdefiniuj wiele executorów (jeśli maszyna slave ma> 1 CPU). Możesz oznaczać niewolnikami, aby kontrolować, które zadania zostaną wykonane na każdym z nich, abyś mógł mieć oddzielny zestaw urządzeń podrzędnych dla każdego z twoich potoków.

Niezależnie od tego, czy podstawowe urządzenia podległe działają nadal, dodatkowe koszty związane z uruchamianiem niewolnika są minimalne. Możesz użyć procesu na wzorcu, aby zachować plik JAR Slave i potrzebne narzędzia do kompilacji; w moim sklepie używamy prostego skryptu rsync, który uruchamia się za każdym razem, gdy master lub slave jest restartowany w celu skopiowania najnowszych narzędzi z mastera do slave'a i restartowania procesu slave.

Takie podejście zmniejsza także stopień, w jakim mistrz Jenkinsa jest pojedynczym punktem awarii.

+0

Nie. Proszę o możliwość posiadania wielu * kolejek *. Mogę zwiększyć liczbę współbieżnych zadań w kolejce. –

+0

Czy możesz wyjaśnić, dlaczego potrzebujesz wielu kolejek? –

+0

Mam wiele projektów. Każdy projekt ma własny potok. Każdy projekt może być budowany równolegle z innymi, do pewnego limitu X - np. Ograniczony licencjami na zestawy narzędzi. Kompilację można uruchomić lokalnie (rzadko) lub zdalnie (często). Idealnie Jenkins nie zostanie zainstalowany na każdej maszynie (koszt administratora jest bardzo wysoki) - jest centralny dyspozytor wysyłający komendy do zdalnych kompilatorów. –

0

To, czego chcesz, można osiągnąć tylko przez uruchomienie osobnego systemu Jenkins dla każdego projektu.

Zwykle ludzie sądzą, że mistrz Jenkinsa ma większe administracyjne obciążenie niż niewolnik, ale jeśli to nie działa, możesz uruchomić wiele serwerów nadrzędnych na serwerze, po prostu przypisz im różne porty.

Jeśli to nie jest dla ciebie dobre, to może Jenkins nie jest odpowiednim narzędziem dla ciebie. To nie jest jedyny serwer CI. Jenkins jest bardzo łatwy w konfiguracji, ale z drugiej strony nie można dokonać głębokiej personalizacji, jak na przykład wiele kolejek kompilacji.

0

Wiem, że ten wątek jest stary, ale pomyślałem, że mimo to skomentuję.

IMO

Używałbym jednego Mistrza i wielu niewolników. Ale zarządzaj wymaganiami konfiguracyjnymi narzędzia za pomocą narzędzia do zarządzania konfiguracją lub CMT (Chef, Puppet, Ansible itp.). Blokowałbym rurociągi do konkretnych niewolników budujących poprzez znaczniki dla określonych wymagań (Windows, Linux, Mac, Visual Studio, Maven, android-sdk itp.). Ponieważ niewolniki są skonfigurowane w twoim cmt, możesz po prostu bardzo łatwo rozpoczynać nową maszynę, bez względu na to, czy jest to maszyna wirtualna, czy fizyczny. Jeden mistrz Jenkinsa może obsłużyć 200+ niewolników.

0

Zgadzam się z @sti. Rozważ wiele projektów, jeśli nadal jest taka potrzeba. Rozważ także, aby je ustawić w klastry, aby były płynne.

0

Przede wszystkim chciałbym zaznaczyć, że podobnie jak w przypadku innych odpowiedzi, zalecanym rozwiązaniem byłoby ustalenie różnych kolejek konstrukcyjnych dla różnych niewolników, jednak istnieje sposób na osiągnięcie tego samego efektu za pomocą samego węzła głównego .

Istnieje wtyczka o nazwie Throttle Concurrent Builds. Umożliwia ustawienie poziomu współbieżności kompilacji na podstawie poszczególnych zadań lub między zadaniami.

Dokumentacja była nieco niejasne, więc są to kroki, które pracowały dla mnie:

  1. Po zainstalowaniu wtyczki, przejdź do Manage Jenkins -> Konfiguracja systemu .
  2. W sekcjiprzepustnicy jednoczęściowej definiuje się grupy zadań i odpowiadające im poziomy współbieżności.
  3. Teraz dla każdego zadania, które ma do przepustnicy, należy przejść do jego konfiguracji, włącz przepustnicy Jednoczesne Buduje (Ogólne fragment), wybierz przepustnicy tego projektu w ramach jednej lub więcej kategorii i przypisać jedną lub więcej kategorie zdefiniowane w poprzednim kroku (nie ma potrzeby ponownego ustawiania limitów).