2011-10-25 2 views
9

Mam zadanie, które wykonuje na maszynach n na podstawie etykiety. Jeśli z jakiegoś powodu niektóre z tych urządzeń są w trybie offline, nie chcę, aby Jenkins ustawiał je w kolejce i czekał, aż będą w trybie online. Chciałbym, żeby Jenkins wykonał pracę na pozostałych maszynach i dokończył pracę. Jakieś sugestie?Jenkins: pomiń, jeśli węzeł jest offline

Edit 1: zdałem sobie sprawę, że zadanie jest przywiązany do wszystkich maszyn: Screenshot

byłem zmuszony to zrobić, bo potrzebne do uruchomienia tego zadania jednocześnie na wszystkich komputerach. Moje pytanie pozostaje takie samo. Jeśli niektóre z tych komputerów są w trybie offline, chciałbym je pominąć, zamiast czekać/czekać w kolejce.

Edytuj 2: Jenkins CLI ma jasne polecenie kolejki. Wydaje się obiecujące na czas.

+0

Otworzyłem żądanie funkcji na Jenkins, aby umożliwić Matrix Project pomijanie węzłów offline: [https://issues.jenkins-ci.org/browse/JENKINS-29380](https://issues.jenkins-ci.org/ przeglądaj/JENKINS-29380). Proszę go przegłosować, jeśli tego właśnie potrzebujesz. –

Odpowiedz

0

Jeśli zadanie jest dołączone w taki sposób, że działa tylko w określonym węźle, nie będzie można go uruchomić na innych komputerach.

Jeśli tak nie jest, zadanie zostanie uruchomione na dowolnym z dostępnych executorów, jest to zachowanie domyślne.

W celu sprawdzenia, czy zadanie może zostać uruchomione w innych węzłach, przejdź do zadania> skonfiguruj i sprawdź ustawienie następujących elementów.

enter image description here

Jeśli to jest wyłączenie na zadaniu, a następnie trzeba będzie sprawdzić węzły, które przyjmują ofert tego można znaleźć w ustawieniach węzłów. Powinno to brzmieć jak poniżej.

enter image description here

Goodluck.

+0

Przepraszam, po przeczytaniu odpowiedzi, dwukrotnie sprawdziłem konfigurację. Naprawdę przywiązałem wszystkie maszyny do tego zadania, aby zmusić je do jednoczesnego uruchamiania na wszystkich maszynach. – publicRavi

+0

@ publicRavi również, jeśli pomogło to oznaczyć ją jako poprawną odpowiedź, aby inni wiedzieli. – myusuf3

+0

Nie widzę, jak rozwiązuje to problem projektu Matrix, który utknął na osi węzła offline (czeka w kolejce, aż węzeł wróci do trybu online)? –

7

Grzywna rozwiązanie można osiągnąć stosując GroovyAxis Plugin i następujący skrypt, który powróci Axis listę niewolników internetowych tylko:

def axis = [] 
for (slave in hudson.model.Hudson.instance.slaves) { 
if (slave.getComputer().isOnline().toString() == "true") { 
    axis += slave.name 
} 
} 
return axis 

UPDATE: Od Jenkins 2.0 API węzeł zostało zmienione, więc użyj Node.toComputer() zamiast: http://javadoc.jenkins-ci.org/hudson/model/Node.html#toComputer%28%29

def axis = [] 
for (slave in jenkins.model.Jenkins.instance.getNodes()) { 
if (slave.toComputer().isOnline()) { 
    axis += slave.getDisplayName() 
} 
} 
return axis 
+0

Pamiętaj, że ta lista nie będzie zawierała wzorca. Jeśli chcesz, musisz go dodać, np. zastępując 'def axis = []' z 'def axis = ['master']'. –

+0

Ponieważ jest to uruchomione w Groovy, możesz również po prostu powiedzieć 'jenkins.model.Jenkins.instance.nodes' – jpyams