2011-10-25 2 views
9

Ho un'attività che viene eseguita su macchine n basate su un'etichetta. Se per qualche ragione alcune di queste macchine sono offline, non voglio che Jenkins le metta in coda e aspetti che siano online. Vorrei che Jenkins eseguisse il lavoro sulle restanti macchine e completasse il lavoro. Eventuali suggerimenti?Jenkins: salta se il nodo non è in linea

Edit 1: mi sono reso conto che il lavoro è legato a tutte le macchine: Screenshot

sono stato costretto a fare questo perché avevo bisogno di questo lavoro di operare contemporaneamente su tutte le macchine. Quindi, la mia domanda rimane la stessa. Se alcune di queste macchine sono offline, vorrei saltare il lavoro su di esse, piuttosto che attendere/accodare.

Edit 2: Jenkins CLI ha un comando chiaro coda. Sembra promettente per il tempo.

+0

Ho aperto una richiesta di funzionalità su Jenkins per consentire a Matrix Project di ignorare i nodi offline: [https://issues.jenkins-ci.org/browse/JENKINS-29380](https://issues.jenkins-ci.org/ sfoglia/JENKINS-29380). Si prega di revocarlo se è quello che ti serve. –

risposta

0

Se l'attività è collegata in modo che venga eseguita solo su un nodo particolare, non sarà in grado di eseguirla su altre macchine.

In caso contrario, l'attività verrà eseguita su uno qualsiasi degli executors disponibili, questo è il comportamento predefinito.

Quindi, per verificare se l'attività può essere eseguita su altri nodi, andare al lavoro> configurare e verificare le impostazioni di seguito.

enter image description here

Se questo è disattivare il compito, allora si avrà bisogno di controllare i nodi che accettano qualsiasi lavoro questo può essere trovato sotto le impostazioni del nodo. Dovrebbe essere come il seguente.

enter image description here

Goodluck.

+0

Spiacente, dopo aver letto la tua risposta, ho ricontrollato la configurazione. In realtà ho legato tutte le macchine a questo lavoro, per costringerlo a funzionare simultaneamente su tutte le macchine. – publicRavi

+0

@publicRavi bene se questo ha contribuito a contrassegnarlo come la risposta corretta in modo che altri lo sappiano. – myusuf3

+0

Io non vedo come si risolve il problema di un progetto Matrix che viene bloccato su Axis di un nodo non in linea (continua attesa in coda fino a quando il nodo è di nuovo online)? –

7

Una multa soluzione può essere raggiunto utilizzando GroovyAxis Plugin e il seguente script, che restituirà l'elenco Asse del schiavi on-line solo:

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

UPDATE: Dal Jenkins 2.0 API nodo ha stato modificato, quindi utilizzare Node.toComputer() invece: 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

Si noti che questo elenco non include il master. Se vuoi che tu debba aggiungerlo, ad es. sostituendo 'def axis = []' con 'def axis = ['master']'. –

+0

Poiché questo è in esecuzione in Groovy, puoi anche solo pronunciare 'jenkins.model.Jenkins.instance.nodes' – jpyams