Salida de la consola de Jenkins en tiempo real para el comando de subproceso en paralelo [cerrado]

22

Tenemos un comando de tejido Python que se ejecuta en paralelo en varios hosts, algo como esto:

$ fab --hosts=prod1.server,prod2.server,prod3.server --parallel copy_cache

Esto copiará el caché a los servidores de producción listados en paralelo. Hay varios registros que ocurren durante todo el proceso para indicar qué tan avanzado estamos, ya que puede tomar horas para los directorios de caché XXgig. Dado que la copia se realiza simultáneamente, la salida cuando se ejecuta en la línea de comando vuelve a entrelazarse en tiempo real, así:

[prod1.server] Executing task 'nginx_cache_copy'
[prod2.server] Executing task 'nginx_cache_copy'
[prod3.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.688243
[prod1.server] INFO: rsyncing cache dir
[prod1.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.716345
[prod2.server] INFO: rsyncing cache dir
[prod2.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.853275
[prod3.server] INFO: rsyncing cache dir
[prod3.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.984154
[prod1.server] INFO: Reloading nginx config
[prod1.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.025155
[prod2.server] INFO: Reloading nginx config
[prod2.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.100169
[prod1.server] SUCCESS: CACHE COPY COMPLETE

2014-09-16 10:02:30.181938
[prod2.server] SUCCESS: CACHE COPY COMPLETE

2014-09-16 10:02:30.331402
[prod3.server] INFO: Reloading nginx config
[prod3.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.559271
[prod3.server] SUCCESS: CACHE COPY COMPLETE

Done.

Sin embargo, cuando la tarea se ejecuta a través de Jenkins, la salida de la consola no se muestra hasta que todas las tareas se realizan porque Jenkins agrupa la salida DESPUÉS de que los hilos se unen cuando todos los hilos están completos. Entonces, una vez que todos los comandos están completos, la salida se ve así:

[prod1.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.688243
[prod1.server] INFO: rsyncing cache dir
[prod1.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.984154
[prod1.server] INFO: Reloading nginx config
[prod1.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.100169
[prod1.server] SUCCESS: CACHE COPY COMPLETE

[prod2.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.716345
[prod2.server] INFO: rsyncing cache dir
[prod2.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:30.025155
[prod2.server] INFO: Reloading nginx config
[prod2.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.181938
[prod2.server] SUCCESS: CACHE COPY COMPLETE

[prod3.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.853275
[prod3.server] INFO: rsyncing cache dir
[prod3.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:30.331402
[prod3.server] INFO: Reloading nginx config
[prod3.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.559271
[prod3.server] SUCCESS: CACHE COPY COMPLETE

Done.

Si bien esto es más legible, no es ideal porque nos gustaría realizar un seguimiento del estado del proceso leyendo la salida de la consola en tiempo real. Tenga en cuenta que cuando este comando de estructura se ejecuta sin la --parallelopción, la salida de la consola se produce en tiempo real , sin embargo, obviamente, esto no es viable porque el proceso en serie tarda mucho más en ejecutarse.

No he podido encontrar una configuración en Jenkins que deshabilite esta agrupación de hilos. ¿Alguien tiene alguna idea?

mVChr
fuente
44
Nunca encontré una solución completa para esto, pero la ejecución PYTHONUNBUFFERED=1 && fab ...ayuda un poco al mostrar cada servidor a medida que se completa en lugar de esperar a que todos se completen. Sin embargo, todavía me gustaría encontrar una solución completamente en tiempo real.
mVChr
3
Estoy votando para cerrar esta pregunta como fuera de tema porque parece más adecuada para la falla del servidor
Tamara Wijsman
1
¿Has intentado preceder los comandos de Unix con "stdbuf -oL"?
strobelight
Mr. VarCharbroiled Charcoal Black - ¿Qué tan satisfecho está con que Superuser.com le ayude a responder esta pregunta? ¿Todavía necesitas atención adicional? Quizás hay más opciones que podemos explorar para usted. Podría considerar cambiar el título a algo más atractivo para llamar la atención, por ejemplo, como una táctica de pensamiento rápido que podría aplicar; ¿Cuál es el daño al intentarlo?
Pimp Juice IT
44
Estoy votando para cerrar esta pregunta como fuera de tema porque no ha recibido una respuesta satisfactoria aquí y puede recibir más / mejor atención en ServerFault.
music2myear