У нас есть команда фабрики 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.
Однако, когда задача запускается через Jenkins, вывод консоли не отображается, пока все задачи не будут выполнены, поскольку Jenkins группирует выходные данные ПОСЛЕ объединения потоков, когда все потоки завершены. Итак, когда все команды завершены, вывод выглядит так:
[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
опции вывод консоли имеет место в реальном время , однако очевидно , что это не выполнимо , так как последовательный процесс занимает гораздо больше времени для запуска.
Мне не удалось найти параметр в Jenkins, который отключит эту группировку потоков. У кого-нибудь есть какие-либо идеи?
VarChar
Жареный уголь черный - Насколько вы удовлетворены тем, что Superuser.com помогает ответить на этот вопрос? Вы все еще нуждаетесь в дополнительном внимании? Возможно, есть другие варианты, которые мы можем изучить для вас. Вы можете рассмотреть возможность изменения названия на что-то более привлекательное, чтобы привлечь внимание, например, в качестве одной из быстрых тактик, которые вы можете применить; какой вред в попытках.
PYTHONUNBUFFERED=1 && fab ...
немного помогает, показывая каждый сервер, как он завершает, вместо того, чтобы ждать завершения всех. Тем не менее, хотелось бы найти решение в реальном времени, хотя.