Đầu ra giao diện điều khiển thời gian thực của Jenkins cho lệnh vải song song [đóng]


22

Chúng tôi có một lệnh vải Python chạy song song trên một số máy chủ, đại loại như thế này:

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

Điều này sẽ sao chép bộ đệm vào các máy chủ sản xuất được liệt kê song song. Có nhiều bản ghi khác nhau xảy ra trong suốt quá trình để chỉ ra chúng ta sẽ đi bao xa vì có thể mất hàng giờ cho các thư mục bộ đệm XXgig. Vì việc sao chép đang diễn ra đồng thời, đầu ra khi chạy trên dòng lệnh sẽ quay trở lại xen kẽ trong thời gian thực, như vậy:

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

Tuy nhiên, khi tác vụ được chạy qua Jenkins, đầu ra của bàn điều khiển sẽ không hiển thị cho đến khi tất cả các tác vụ được thực hiện do Jenkins nhóm đầu ra SAU các luồng được nối khi tất cả các luồng hoàn thành. Vì vậy, một khi tất cả các lệnh hoàn thành, đầu ra trông như thế này:

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

Mặc dù điều này dễ đọc hơn, nhưng nó không lý tưởng vì chúng tôi muốn theo dõi trạng thái của quá trình bằng cách đọc đầu ra của bàn điều khiển trong thời gian thực. Lưu ý rằng khi lệnh vải này được điều hành mà không cần các --paralleltùy chọn giao diện điều khiển đầu ra không xảy ra trong thời gian thực , tuy nhiên rõ ràng đây không phải là hoàn toàn khả thi vì quá trình nối tiếp mất nhiều thời gian để chạy.

Tôi đã không thể tìm thấy một thiết lập trong Jenkins sẽ vô hiệu hóa nhóm này. Có ai có ý tưởng nào?


4
Không bao giờ tìm thấy một giải pháp hoàn chỉnh cho việc này, nhưng việc chạy PYTHONUNBUFFERED=1 && fab ...giúp một chút bằng cách hiển thị mỗi máy chủ khi nó hoàn thành thay vì chờ tất cả hoàn thành. Vẫn muốn tìm một giải pháp hoàn toàn thời gian thực mặc dù.
mVChr

3
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì có vẻ phù hợp hơn với Lỗi Máy chủ
Tamara Wijsman

1
Bạn đã thử trước các lệnh unix với "stdbuf -oL" chưa?
strobelight

Ông VarCharbroiled Char than Black - Bạn hài lòng như thế nào với Superuser.com giúp cung cấp câu trả lời cho câu hỏi này? Bạn đang cần thêm sự chú ý vẫn còn? Có lẽ có nhiều lựa chọn hơn chúng tôi có thể khám phá cho bạn. Bạn có thể xem xét thay đổi tiêu đề thành một cái gì đó hấp dẫn hơn để thu hút sự chú ý chẳng hạn như một chiến thuật suy nghĩ nhanh mà bạn có thể áp dụng; những gì có hại trong việc cố gắng.
Pimp Juice IT

4
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì nó chưa nhận được câu trả lời thỏa đáng ở đây và có thể nhận được nhiều sự chú ý hơn / tốt hơn tại ServerFault.
music2myear
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.