2012-01-04 29 views
5

Tengo una cantidad de trabajos diferentes en Jenkins, divididos en proyectos con sus propios "conductos" de compilación/prueba/análisis. La mayoría de estos trabajos son en realidad comandos remotos en lugar de compilados en la caja.Varias colas de compilación en Jenkins

Sin embargo, Jenkins listo para usar solo admite una cola para compilaciones todas. Quiero definir una cola por proyecto (o vista).

¿Cómo puedo lograr esto?

Respuesta

4

Hasta donde yo sé, esto no es posible sin cambiar el código de Jenkins, pero creo que se puede lograr el mismo objetivo con un mantenimiento mínimo usando build slaves. Se pueden ejecutar diferentes compilaciones simultáneamente en los esclavos, o incluso en el mismo esclavo si definir múltiples ejecutores (si la máquina esclava tiene> 1 CPU). Puede etiquetar a los esclavos para controlar qué trabajos se ejecutan en cada uno, por lo que podría tener un conjunto separado de esclavos para cada una de sus tuberías.

Además de garantizar que las máquinas esclavas básicas sigan funcionando, la carga específica de Jenkins para ejecutar un esclavo es mínima. Puede usar un proceso en el maestro para mantener el archivo esclavo JAR y las herramientas de compilación que necesita actualizar; en mi tienda utilizamos un simple script rsync que se ejecuta cada vez que se reinicia el maestro o el esclavo para copiar las últimas herramientas desde el maestro al esclavo y reiniciar el proceso esclavo.

Este enfoque también reduce la medida en que el maestro Jenkins es un único punto de falla.

+0

No. Estoy pidiendo la capacidad de tener múltiples * colas *. Puedo aumentar el número de trabajos simultáneos en una cola. –

+0

¿Puede ampliar por qué necesita varias colas? –

+0

Tengo varios proyectos. Cada proyecto tiene su propia cartera. Cada proyecto puede compilar simultáneamente con los demás, hasta cierto límite X, por ejemplo, limitado por licencias para sus conjuntos de herramientas. Una compilación se puede iniciar localmente (raro) o remotamente (común). Lo ideal es que Jenkins no se instale en todas las máquinas de compilación (el costo de administración es muy alto); hay un despachador central que envía comandos a los compiladores remotos. –

0

Lo que desea solo se puede lograr ejecutando un maestro de Jenkins por separado para cada proyecto.

Por lo general, las personas piensan que un maestro Jenkins tiene más gastos administrativos que un esclavo, pero si eso no funciona, puede ejecutar varios maestros en un servidor, simplemente asígneles diferentes puertos.

Si esto no es bueno para usted, entonces tal vez Jenkins no es la herramienta adecuada para usted. No es el único servidor de CI que existe. Jenkins es muy fácil de configurar pero, por otro lado, no es posible realizar una personalización profunda, como múltiples colas de compilación.

0

Sé que este hilo es viejo, pero pensé que podría comentar de todos modos.

OMI

me gustaría utilizar un maestro y varios esclavos. Pero administre los requisitos de configuración de la herramienta a través de una herramienta de administración de configuración o CMT (Chef, Puppet, Ansible, etc.). Yo bloquearía las tuberías a esclavos de construcción específicos a través de etiquetas para requisitos específicos (windows, linux, Mac, visualstudio, maven, android-sdk, etc.). Como los esclavos están configurados en su cmt, puede simplemente hacer girar una máquina nueva muy fácilmente, independientemente de si se trata de una máquina virtual o un hardware físico. Un maestro de Jenkins puede manejar más de 200 esclavos de construcción.

0

En primer lugar, me gustaría señalar que, como otras respuestas describen, pegar las diferentes colas de compilación a diferentes esclavos sería la solución recomendada, sin embargo hay una manera de lograr el mismo efecto con solo el nodo maestro .

Hay un complemento llamado Throttle Concurrent Builds. Permite establecer el nivel de concurrencia de la compilación por trabajo o entre trabajos.

La documentación fue un poco vago, por lo que estos son los pasos que han trabajado para mí:

  1. Después de instalar el plugin, vaya a Manejo de Jenkins -> Configuración de Sistema .
  2. En la sección Throttle Concurrent Builds, defina los grupos de trabajos y sus respectivos niveles de concurrencia.
  3. Ahora para cada trabajo que desea estrangular, ir a su configuración, permiten acelerador concurrente construye (general sección), seleccione acelerador este proyecto como parte de una o más categorías y asignar uno o más de las categorías definidas en el paso anterior (no es necesario establecer los límites aquí de nuevo).
Cuestiones relacionadas