Вывод на консоль в реальном времени Jenkins для параллельной многопоточной команды Fabric [закрыто]


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.

Однако, когда задача запускается через 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, который отключит эту группировку потоков. У кого-нибудь есть какие-либо идеи?


4
Никогда не находил полного решения для этого, но работа PYTHONUNBUFFERED=1 && fab ...немного помогает, показывая каждый сервер, как он завершает, вместо того, чтобы ждать завершения всех. Тем не менее, хотелось бы найти решение в реальном времени, хотя.
mVChr

3
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он кажется более подходящим для сбоя сервера
Тамара Вийсман

1
Вы пробовали предшествовать командам Unix с "stdbuf -oL"?
строблайт

Мистер VarCharЖареный уголь черный - Насколько вы удовлетворены тем, что Superuser.com помогает ответить на этот вопрос? Вы все еще нуждаетесь в дополнительном внимании? Возможно, есть другие варианты, которые мы можем изучить для вас. Вы можете рассмотреть возможность изменения названия на что-то более привлекательное, чтобы привлечь внимание, например, в качестве одной из быстрых тактик, которые вы можете применить; какой вред в попытках.
Сок Pimp IT

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