У нас є тканинна команда 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
опції висновок консолі має місце в реальному час , проте очевидно , що це не реально , так як послідовний процес займає набагато більше часу для запуску.
Мені не вдалося знайти в Дженкінсі налаштування, яке б відключило групування ниток. Хтось має ідеї?
VarChar
розсипав вугілля Чорний - Наскільки ви задоволені тим, що Superuser.com допомагає дати відповідь на це питання? Ви все ще потребуєте додаткової уваги? Можливо, є інші варіанти, які ми можемо вивчити для вас. Ви можете розглянути можливість зміни заголовка на щось більш привабливе, щоб привернути увагу, наприклад, як тактику швидкої продуманості, яку ви могли застосувати; яка шкода в спробах.
PYTHONUNBUFFERED=1 && fab ...
трохи допомагає, показуючи кожен сервер, який він завершує, замість того, щоб чекати, коли всі завершаться. Все-таки хотілося б знайти повністю рішення в реальному часі.