2011-09-13 10 views
29

Tengo algunos trabajos en Jenkins que usan Selenium para modificar una base de datos a través del front-end de un sitio web. Si algunos de estos trabajos se ejecutan al mismo tiempo, pueden producirse errores debido a lecturas sucias. ¿Hay alguna forma de forzar ciertos trabajos en Jenkins para que no puedan funcionar al mismo tiempo? Preferiría no tener que colocar o capturar un candado en la base de datos, que podría ser leído o modificado por cualquier número de usuarios que también estén realizando pruebas.¿Hay alguna manera de hacer que los empleos en Jenkins sean mutuamente exclusivos?

Respuesta

21

Desea el complemento Throttle Concurrent Builds que le permite definir semáforos globales y por nodo.

Cerraduras y pestillos está siendo deprecated a favor de Throttle compilaciones concurrentes.

+0

No me di cuenta de la advertencia obsoleta en el complemento Lock & Latches, voy a actualizar mi Jenkins con este nuevo complemento, gracias. –

4

He probado tanto el complemento locks & latches como el port allocator como formas de lograr lo que estás tratando de hacer. Ninguno funcionó de manera confiable para mí. Las cerraduras & cerraduras funcionaban algunas veces, pero ocasionalmente conseguía trabajos colgados. Usar el asignador de puerto como un truco funcionará a menos que tenga múltiples nodos jenkins, pero la sobrecarga de configuración es algo alta. Lo que finalmente me he decidido a es otro truco, pero funciona de forma fiable y utiliza núcleo Jenkins cosas (no hay plugins):

  • crear un nodo esclavo que se ejecuta en la misma caja que el maestro (o no, si tiene un montón de cajas)
  • dar a este esclavo un único ejecutor (clave)
  • ligar las 2 (o n) los trabajos que no se deben ejecutar en conjunto para este nuevo nodo esclavo
  • establecer opcionalmente el uso del esclavo a 'sólo los trabajos atados 'si atornillará sus otros trabajos si se ejecutan en el nuevo esclavo

Como el esclavo tiene solo un ejecutor, los trabajos vinculados a él nunca se pueden ejecutar juntos.

+2

¡Impresionante! Solo una nota para principiantes como yo: para vincular un trabajo, utilice la opción "Restringir dónde se puede ejecutar este proyecto" en la configuración del trabajo. – Linulin

Cuestiones relacionadas