Sortie de la console en temps réel de Jenkins pour la commande de structure filetée parallèle [fermé]


22

Nous avons une commande de structure Python qui s'exécute en parallèle sur plusieurs hôtes, quelque chose comme ceci:

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

Cela copiera le cache sur les serveurs de production répertoriés en parallèle. Il existe divers enregistrements qui se produisent tout au long du processus pour indiquer à quel point nous en sommes, car cela peut prendre des heures pour les répertoires de cache XXgig. Étant donné que la copie se produit simultanément, la sortie lorsqu'elle est exécutée sur la ligne de commande revient entrelacée en temps réel, comme suit:

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

Cependant, lorsque la tâche est exécutée via Jenkins, la sortie de la console ne s'affiche que lorsque toutes les tâches sont terminées car Jenkins regroupe la sortie APRÈS que les threads soient joints lorsque tous les threads sont terminés. Ainsi, une fois toutes les commandes terminées, la sortie ressemble à ceci:

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

Bien que cela soit plus lisible, ce n'est pas idéal car nous aimerions garder une trace de l'état du processus en lisant la sortie de la console en temps réel. Notez que lorsque cette commande Fabric est exécutée sans l' --paralleloption, la sortie de la console se produit en temps réel , mais cela n'est évidemment pas réalisable car le processus série prend beaucoup plus de temps à s'exécuter.

Je n'ai pas pu trouver un paramètre dans Jenkins qui désactivera ce regroupement de threads. Quelqu'un a-t-il une idée?


4
Je n'ai jamais trouvé de solution complète pour cela, mais l'exécution PYTHONUNBUFFERED=1 && fab ...aide un peu en montrant chaque serveur comme il se termine au lieu d'attendre que tout se termine. J'aimerais toujours trouver une solution complètement en temps réel.
mVChr

3
Je vote pour fermer cette question comme hors sujet car elle semble plus adaptée à la défaillance du serveur
Tamara Wijsman

1
avez-vous essayé de précéder les commandes unix avec "stdbuf -oL"?
strobelight

M. VarCharbroiled Charcoal Black - Dans quelle mesure êtes-vous satisfait de l'aide apportée par Superuser.com pour répondre à cette question? Avez-vous encore besoin d'une attention supplémentaire? Il y a peut-être d'autres options que nous pouvons explorer pour vous. Vous pourriez envisager de changer le titre en quelque chose de plus attrayant pour attirer l'attention, par exemple comme une tactique de réflexion rapide que vous pourriez appliquer; quel est le mal à essayer.
Pimp Juice IT

4
Je vote pour fermer cette question comme hors sujet car elle n'a pas obtenu de réponse satisfaisante ici et peut recevoir plus / meilleure attention chez ServerFault.
music2myear
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.