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' --parallel
opzione, 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?
VarChar
broiled 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.
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.