Вихід консолі в реальному часі Дженкінса для паралельної команди з різьбовою тканиною [закрито]


22

У нас є тканинна команда Python, яка паралельно працює через декілька хостів, приблизно так:

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

Це скопіює кеш-пам'ять на виробничі сервери, перелічені паралельно. Існують різні журнали, що відбуваються протягом усього процесу, щоб вказати, наскільки далеко ми знаходимося, оскільки це може зайняти години для каталогів XXgig кешу. Оскільки копіювання відбувається одночасно, вихід при запуску в командному рядку повертається з переплетенням в режимі реального часу, як-от:

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

Однак, коли завдання виконується через Дженкінса, вихід консолі не відображається до тих пір, поки всі завдання не будуть виконані, оскільки Дженкінс згрупує висновок ПІСЛЯ потоків, що з'єднуються, коли всі потоки завершені. Отже, після завершення всіх команд результат виглядає так:

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

Хоча це читабельніше, це не ідеально, тому що ми хотіли б відслідковувати стан процесу, читаючи вихід консолі в режимі реального часу. Зверніть увагу , що , коли ця команда тканини запускається без в --parallelопції висновок консолі має місце в реальному час , проте очевидно , що це не реально , так як послідовний процес займає набагато більше часу для запуску.

Мені не вдалося знайти в Дженкінсі налаштування, яке б відключило групування ниток. Хтось має ідеї?


4
Ніколи не знайшли повного рішення для цього, але запуск PYTHONUNBUFFERED=1 && fab ...трохи допомагає, показуючи кожен сервер, який він завершує, замість того, щоб чекати, коли всі завершаться. Все-таки хотілося б знайти повністю рішення в реальному часі.
mVChr

3
Я голосую за те, щоб закрити це питання поза темою, оскільки, здається, більше підходить помилка сервера
Tamara Wijsman

1
ви намагалися передувати командам unix за допомогою "stdbuf -oL"?
strobelight

Містер VarCharрозсипав вугілля Чорний - Наскільки ви задоволені тим, що Superuser.com допомагає дати відповідь на це питання? Ви все ще потребуєте додаткової уваги? Можливо, є інші варіанти, які ми можемо вивчити для вас. Ви можете розглянути можливість зміни заголовка на щось більш привабливе, щоб привернути увагу, наприклад, як тактику швидкої продуманості, яку ви могли застосувати; яка шкода в спробах.
Pimp Juice IT

4
Я голосую, щоб закрити це питання поза темою, оскільки він не отримав задовільної відповіді тут і, можливо, отримає більше / кращу увагу на ServerFault.
music2myear
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.