mutex - ejemplos de requisitos no excluyentes
¿Hay alguna manera de hacer que los trabajos en Jenkins sean mutuamente exclusivos? (3)
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.
Desea el complemento Throttle Concurrent Builds que le permite definir semáforos globales y por nodo.
Las cerraduras y los pestillos están en deprecated en favor de las construcciones concurrentes de Throttle.
He probado tanto el complemento de bloqueos y bloqueos como el complemento de asignación de puertos como formas de lograr lo que intentas hacer. Ninguno funcionó de manera confiable para mí. Las cerraduras y los pestillos funcionaban algunas veces, pero a veces 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. En lo que finalmente me he decidido es en otro hack, pero funciona de manera confiable y usa material básico de Jenkins (sin complementos):
- crea un nodo esclavo ejecutándose en el mismo cuadro que el maestro (o no, si tienes muchas cajas)
- dale a este esclavo un único ejecutor (clave)
- Ate los 2 (o n) trabajos que no deben ejecutarse juntos en este nuevo nodo esclavo
- opcionalmente establezca el uso del esclavo en ''trabajos atados solamente'' si arruinará sus otros trabajos si se ejecutan en el nuevo esclavo
Como el esclavo tiene un solo ejecutor, los trabajos vinculados a él nunca pueden ejecutarse juntos.
Si considera la base de datos como un recurso compartido que solo puede usarse exclusivamente, entonces esto se ajusta al uso del complemento de recursos bloqueables .
Está siendo activamente desarrollado y mejorado, y es muy versátil.