8

Usamos Jenkins para nuestro sistema de compilación CI. También usamos 'compilaciones simultáneas' para que Jenkins construya cada cambio de forma independiente. Esto significa que a menudo tenemos 5 o 6 versiones del mismo trabajo ejecutándose simultáneamente. Para acomodar esto, tenemos 4 esclavos cada uno con 12 ejecutores.¿Cómo puedo modificar el comportamiento de equilibrio de carga que Jenkins usa para controlar a los esclavos?

El problema es que Jenkins realmente no 'equilibra la carga' entre sus esclavos. Trata de construir un trabajo en el mismo esclavo sobre el que se había construido previamente (presumiblemente para reducir la sincronización de tiempo desde el control de origen). Esto es un problema porque Jenkins construirá las 6 instancias de nuestra construcción en el mismo esclavo (o más probablemente entre 2 esclavos). Una máquina de construcción se atasca y corre muy lentamente mientras el resto permanece inactivo.

¿Hay algún complemento o algo que altere el comportamiento del equilibrio de carga que Jenkins usa para controlar a sus esclavos?

Respuesta

1

Si no encuentra un plugin que lo hace automáticamente, aquí está una idea de lo que puede hacer:

  • Instalar Node Label Parameter plugin
  • Añadir ESCLAVO parámetro a sus puestos de trabajo
  • Restringir puestos de trabajo a ejecutar en ${SLAVE}
  • Agregar un trabajo de desencadenador que hará lo siguiente:

    • Analice la distribución de carga a través de un script Groovy del sistema y decida en qué nodo comenzar la siguiente compilación.
    • Despachar la compilación en ese nodo con Parametertized Trigger plugin asignando el valor apropiado al parámetro ESCLAVO.

Con el fin de analizar la distribución de carga es necesario instalar Groovy plugin y familiarizarse con Jenkins Main Module API. Aquí están some useful initial pointers.

+0

No parece ser un plugin que hace esto (que puedo encontrar). Si bien esta sugerencia es mucho más ... "complicada" que el simple uso de un complemento, ¡parece nuestra mejor opción! –

3

Si sus máquinas de compilación no pueden manejar cómodamente más de una compilación, ¿por qué configurarlas con 12 ejecutores? Si ese es realmente el caso, debes reducir el número de ejecutores a 1. Mi Jenkins tiene 30 esclavos, cada uno con 1 ejecutor.

+0

Nuestros esclavos Jenkins manejan muchas tareas, una de las cuales es compilar nuestro código. Los esclavos tienen 12 ejecutores porque pueden hacer 12 cosas a la vez (las construcciones son las "más grandes" de estas cosas). Incluso puede ejecutar 4-5 compilaciones muy bien, solo ralentiza las cosas (y queremos que la retroalimentación de estas compilaciones sea lo más rápida posible). Al reducir estos esclavos a 1 ejecutor, tendríamos 15 núcleos inactivos la mayor parte del día, no un uso muy eficiente de los recursos. –

12

Nos enfrentamos a un problema similar. Así que he creado un complemento que cambia Load Balancer en Jenkins para seleccionar un nodo que actualmente tenga la menor carga: https://wiki.jenkins-ci.org/display/JENKINS/Least+Load+Plugin

. Se agradece cualquier comentario.

+0

¡Genial, gracias!La última fecha de compilación del complemento es actualmente "27 de junio de 2013". ¿Es compatible con las versiones más nuevas de Jenkins, p. 1.625.3? – t0r0X

+0

Debería ser Actualmente lo estoy usando con 1.625.2 – bstick12

+0

gracias de nuevo, lo intentaré! – t0r0X

Cuestiones relacionadas