Jenkins Echtzeit-Konsolenausgabe für den parallelen Thread-Fabric-Befehl [closed]


22

Wir haben einen Python-Fabric-Befehl, der parallel auf mehreren Hosts ausgeführt wird.

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

Dadurch wird der Cache auf die parallel aufgelisteten Produktionsserver kopiert. Während des gesamten Vorgangs werden verschiedene Protokollierungen durchgeführt, um anzuzeigen, wie weit wir sind, da es Stunden dauern kann, bis die XXgig-Cache-Verzeichnisse verfügbar sind. Da gleichzeitig kopiert wird, wird die Ausgabe in der Befehlszeile interlaced in Echtzeit wie folgt zurückgegeben:

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

Wenn die Aufgabe jedoch über Jenkins ausgeführt wird, wird die Konsolenausgabe erst angezeigt, wenn alle Aufgaben erledigt sind, da Jenkins die Ausgabe nach dem Zusammenführen der Threads gruppiert, wenn alle Threads abgeschlossen sind. Sobald alle Befehle abgeschlossen sind, sieht die Ausgabe folgendermaßen aus:

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

Dies ist zwar besser lesbar, aber nicht ideal, da wir den Status des Prozesses verfolgen möchten, indem wir die Konsolenausgabe in Echtzeit lesen. Beachten Sie, dass die Konsolenausgabe in Echtzeit erfolgt , wenn dieser Fabric-Befehl ohne die --parallelOption ausgeführt wird. Dies ist jedoch offensichtlich nicht möglich, da die Ausführung des seriellen Prozesses viel länger dauert.

Ich konnte in Jenkins keine Einstellung finden, die diese Thread-Gruppierung deaktiviert. Hat jemand irgendwelche Ideen?


4
Nie eine vollständige Lösung dafür gefunden, aber das Ausführen PYTHONUNBUFFERED=1 && fab ...hilft ein wenig, indem jeder Server beim Abschluss angezeigt wird, anstatt auf den Abschluss aller Server zu warten. Möchte trotzdem eine komplett Echtzeitlösung finden.
mVChr

3
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da sie besser für
Serverfehler

1
Haben Sie versucht, den Unix-Befehlen "stdbuf -oL" voran zu stellen?
Strobelight

Mr. VarCharbroiled Charcoal Black - Wie zufrieden sind Sie mit der Unterstützung von Superuser.com bei der Beantwortung dieser Frage? Benötigen Sie noch zusätzliche Aufmerksamkeit? Vielleicht gibt es noch weitere Möglichkeiten, die wir für Sie erkunden können. Sie könnten in Erwägung ziehen, den Titel in einen attraktiveren Titel zu ändern, um die Aufmerksamkeit auf sich zu ziehen. Was schadet es, es zu versuchen?
Pimp Juice IT

4
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da sie hier nicht zufriedenstellend beantwortet wurde und möglicherweise mehr oder bessere Aufmerksamkeit bei ServerFault erhält.
music2myear
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.