Uscita console in tempo reale Jenkins per comando tessuto filettato parallelo [chiuso]


22

Abbiamo un comando fabric Python che funziona in parallelo su più host, qualcosa del genere:

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

Questo copierà la cache sui server di produzione elencati in parallelo. Esistono varie registrazioni che si verificano durante il processo per indicare quanto siamo lontani dal momento che possono essere necessarie ore per le directory della cache XXgig. Poiché la copia avviene simultaneamente, l'output quando eseguito sulla riga di comando ritorna interlacciato in tempo reale, in questo modo:

[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.

Tuttavia, quando l'attività viene eseguita tramite Jenkins, l'output della console non viene visualizzato fino a quando non vengono eseguite tutte le attività poiché Jenkins raggruppa l'output DOPO che i thread vengono uniti al termine di tutti i thread. Quindi, una volta completati tutti i comandi, l'output è simile al seguente:

[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.

Sebbene sia più leggibile, non è l'ideale perché vorremmo tenere traccia dello stato del processo leggendo l'output della console in tempo reale. Si noti che quando questo comando fabric viene eseguito senza l' --parallelopzione, l'output della console si verifica in tempo reale , tuttavia ovviamente questo non è realizzabile perché l'esecuzione del processo seriale richiede molto più tempo.

Non sono stato in grado di trovare un'impostazione in Jenkins che disabiliterà questo raggruppamento di thread. Qualcuno ha qualche idea?


4
Non PYTHONUNBUFFERED=1 && fab ...ho mai trovato una soluzione completa per questo, ma l'esecuzione aiuta un po 'mostrando ogni server mentre completa invece di aspettare che tutto sia completato. Tuttavia, vorrei comunque trovare una soluzione completamente in tempo reale.
mVChr

3
Sto votando per chiudere questa domanda come fuori tema perché sembra più adatta a Server Fault
Tamara Wijsman,

1
hai provato a precedere i comandi unix con "stdbuf -oL"?
stroboscopica

Mr. VarCharbroiled Charcoal Black - Quanto sei soddisfatto di Superuser.com nel fornire una risposta a questa domanda? Hai ancora bisogno di ulteriore attenzione? Forse ci sono ulteriori opzioni che possiamo esplorare per te. Potresti considerare di cambiare il titolo in qualcosa di più attraente per attirare l'attenzione, ad esempio, come una tattica di pensiero rapido che potresti applicare; qual è il danno nel provare.
Pimp Juice IT

4
Sto votando per chiudere questa domanda come off-topic perché non ha ottenuto una risposta soddisfacente qui e potrebbe ricevere più / migliore attenzione su ServerFault.
music2myear,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.