Dane wyjściowe konsoli Jenkins w czasie rzeczywistym dla polecenia równoległego wątku [zamknięty]

22

Mamy polecenie w języku Python, które działa równolegle na kilku hostach, mniej więcej tak:

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

Spowoduje to skopiowanie pamięci podręcznej na serwery produkcyjne wymienione równolegle. W trakcie tego procesu występuje różne rejestrowanie, które wskazuje, jak daleko jesteśmy, ponieważ katalogi pamięci podręcznej XXgig mogą zająć wiele godzin. Ponieważ kopiowanie odbywa się jednocześnie, dane wyjściowe po uruchomieniu w wierszu poleceń wracają z przeplotem w czasie rzeczywistym, tak jak poniżej:

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

Jednak po uruchomieniu zadania przez Jenkins dane wyjściowe konsoli nie są wyświetlane, dopóki wszystkie zadania nie zostaną wykonane, ponieważ Jenkins grupuje dane wyjściowe PO połączeniu wątków po zakończeniu wszystkich wątków. Tak więc po zakończeniu wszystkich poleceń dane wyjściowe wyglądają następująco:

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

Chociaż jest to bardziej czytelne, nie jest idealne, ponieważ chcielibyśmy śledzić stan procesu, czytając dane wyjściowe konsoli w czasie rzeczywistym. Zauważ, że gdy ta komenda tkanina jest prowadzony bez tej --parallelopcji wyjście konsola ma pojawić się w czasie rzeczywistym , jednak oczywiście nie jest to wykonalne, ponieważ proces seryjny trwa znacznie dłużej biec.

Nie udało mi się znaleźć ustawienia w Jenkins, które wyłączy to grupowanie wątków. Czy ktoś ma jakieś pomysły?

mVChr
źródło
4
Nigdy nie znalazłem kompletnego rozwiązania tego problemu, ale uruchomienie PYTHONUNBUFFERED=1 && fab ...trochę pomaga, pokazując każdy serwer jako ukończony, zamiast czekać na ukończenie wszystkich. Nadal chciałbym znaleźć rozwiązanie w czasie rzeczywistym.
mVChr
3
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ wydaje się bardziej odpowiednie dla błędu serwera
Tamara Wijsman,
1
próbowałeś poprzedzać komendy unixa „stdbuf -oL”?
strobelight
Pan VarCharpiekł Charcoal Black - Czy jesteś zadowolony z Superuser.com pomagając udzielić odpowiedzi na to pytanie? Czy nadal potrzebujesz dodatkowej uwagi? Być może są jeszcze inne opcje, które możemy dla Ciebie zbadać. Możesz rozważyć zmianę tytułu na coś bardziej atrakcyjnego, aby zwrócić na siebie uwagę, na przykład jako szybką taktykę myślową, którą możesz zastosować; jaka jest szkoda w próbach.
Pimp Juice IT,
4
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ nie uzyskało ono tutaj zadowalającej odpowiedzi i może uzyskać więcej / lepszą uwagę na ServerFault.
music2myear