2011-10-25 24 views
9

Tengo una tarea que se ejecuta en máquinas n basadas en una etiqueta. Si por alguna razón algunas de estas máquinas están fuera de línea, no quiero que Jenkins las ponga en una cola y espere hasta que estén en línea. Me gustaría que Jenkins ejecute el trabajo en las máquinas restantes y complete el trabajo. ¿Alguna sugerencia?Jenkins: omita si el nodo está fuera de línea

Edición 1: me di cuenta de que el trabajo está ligado a todas las máquinas: Screenshot

que se vio obligado a hacer esto porque necesitaba este trabajo se ejecute de forma simultánea en todas las máquinas. Por lo tanto, mi pregunta sigue siendo la misma. Si algunas de estas máquinas están fuera de línea, me gustaría omitir el trabajo en ellas, en lugar de esperar/hacer cola.

Editar 2: Jenkins CLI tiene un claro comando de cola. Parece prometedor por el momento.

+0

He abierto una solicitud de función en Jenkins para permitir que Matrix Project omita nodos fuera de línea: [https://issues.jenkins-ci.org/browse/JENKINS-29380](https://issues.jenkins-ci.org/ navegar/JENKINS-29380). Vota por favor si eso es lo que necesitas. –

Respuesta

0

Si la tarea está conectada de forma que solo se ejecuta en un nodo determinado, no podrá ejecutarse en otras máquinas.

Si ese no es el caso, entonces la tarea se ejecutará en cualquiera de los ejecutores disponibles, este es el comportamiento predeterminado.

Para verificar si la tarea puede ejecutarse en otros nodos, vaya al trabajo> configure y compruebe la configuración de lo siguiente.

enter image description here

Si eso es neutralización en la tarea, entonces usted tendrá que comprobar los nodos que acepten cualquier trabajo esto se puede encontrar bajo la configuración del nodo. Debe leer como el siguiente.

enter image description here

Goodluck.

+0

Lo siento, después de leer su respuesta, comprobé la configuración dos veces. De hecho, vinculé todas las máquinas a este trabajo para forzarlo a funcionar simultáneamente en todas las máquinas. – publicRavi

+0

@publicRavi bien si esto ayudó a marcarlo como la respuesta correcta para que otros lo sepan. – myusuf3

+0

No veo cómo eso resuelve el problema de un proyecto de Matrix que se atasca en Axis de un nodo fuera de línea (sigue esperando en la cola hasta que el nodo vuelva a estar en línea)? –

7

Una solución bien se puede lograr utilizando GroovyAxis Plugin y el siguiente script, que devolverá la lista Eje del esclavos en línea sólo:

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

ACTUALIZACIÓN: Desde Jenkins 2.0 del API nodo tiene ha cambiado, por lo tanto use Node.toComputer() en su lugar: 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

Tenga en cuenta que esta lista no incluirá el maestro. Si lo desea, debe agregarlo, p. reemplazando 'def axis = []' con 'def axis = ['master']'. –

+0

Dado que esto se ejecuta en Groovy, también puede decir 'jenkins.model.Jenkins.instance.nodes' – jpyams

Cuestiones relacionadas