Saída do console em tempo real da Jenkins para comando de malha encadeada paralela [fechado]

22

Temos um comando de malha Python que é executado em paralelo em vários hosts, algo como isto:

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

Isso copiará o cache para os servidores de produção listados em paralelo. Existem vários registros que ocorrem ao longo do processo para indicar quanto tempo estamos, pois pode levar horas para os diretórios de cache do XXgig. Como a cópia está ocorrendo simultaneamente, a saída, quando executada na linha de comando, volta entrelaçada em tempo real, da seguinte forma:

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

No entanto, quando a tarefa é executada no Jenkins, a saída do console não é exibida até que todas as tarefas sejam concluídas porque o Jenkins agrupa a saída APÓS os segmentos serem unidos quando todos os segmentos estiverem concluídos. Assim, quando todos os comandos estiverem concluídos, a saída será assim:

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

Embora isso seja mais legível, não é o ideal, porque gostaríamos de acompanhar o estado do processo lendo a saída do console em tempo real. Observe que, quando esse comando de malha é executado sem a --parallelopção, a saída do console ocorre em tempo real , no entanto, obviamente, isso não é viável porque o processo serial leva muito mais tempo para ser executado.

Não consegui encontrar uma configuração no Jenkins que desabilite esse agrupamento de threads. Alguém tem alguma idéia?

mVChr
fonte
4
Nunca encontrou uma solução completa para isso, mas a execução PYTHONUNBUFFERED=1 && fab ...ajuda um pouco, mostrando cada servidor conforme ele é concluído, em vez de esperar que todos sejam concluídos. Ainda assim, gostaria de encontrar uma solução completamente em tempo real.
MVChr 22/10/2014
3
Eu estou votando para fechar esta questão como off-topic, porque parece mais apto para o servidor falha
Tamara Wijsman
1
você já tentou preceder os comandos unix com "stdbuf -oL"?
Strobelight 26/09/16
Mr. VarCharCharcoal Black - Qual é o seu grau de satisfação com o Superuser.com, ajudando a fornecer uma resposta a esta pergunta? Você ainda precisa de atenção adicional? Talvez haja outras opções que possamos explorar para você. Você pode mudar o título para algo mais atraente para chamar a atenção, por exemplo, como uma tática de raciocínio rápido que você poderia aplicar; qual é o mal em tentar?
Pimp Juice IT
4
Estou votando para encerrar esta questão como fora de tópico, porque ela não obteve uma resposta satisfatória aqui e pode receber mais / melhor atenção no ServerFault.
music2myear