Kami memiliki perintah fabric Python yang berjalan secara paralel di beberapa host, seperti ini:
$ fab --hosts=prod1.server,prod2.server,prod3.server --parallel copy_cache
Ini akan menyalin cache ke server produksi yang terdaftar secara paralel. Ada berbagai pencatatan yang terjadi di seluruh proses untuk menunjukkan seberapa jauh kita karena dibutuhkan waktu berjam-jam untuk direktori cache XXgig. Karena penyalinan terjadi secara bersamaan, output ketika dijalankan pada baris perintah kembali bertautan secara real-time, seperti:
[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.
Namun, ketika tugas dijalankan melalui Jenkins, output konsol tidak ditampilkan sampai semua tugas selesai karena Jenkins mengelompokkan output SETELAH utas bergabung ketika semua utas selesai. Jadi, setelah semua perintah selesai outputnya terlihat seperti ini:
[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.
Meskipun ini lebih mudah dibaca, itu tidak ideal karena kami ingin melacak keadaan proses dengan membaca output konsol secara realtime. Perhatikan bahwa ketika perintah kain ini dijalankan tanpa yang --parallel
pilihan output konsol tidak terjadi secara realtime , namun jelas ini bukan bisa diterapkan karena proses serial memakan waktu lebih lama untuk menjalankan.
Saya belum dapat menemukan pengaturan di Jenkins yang akan menonaktifkan pengelompokan utas ini. Adakah yang punya ide?
VarChar
panggang Charcoal Black - Seberapa puas Anda dengan Superuser.com membantu memberikan jawaban untuk pertanyaan ini? Apakah Anda masih membutuhkan perhatian tambahan? Mungkin ada opsi lebih lanjut yang dapat kami jelajahi untuk Anda. Anda dapat mempertimbangkan mengubah judul menjadi sesuatu yang lebih menarik untuk menarik perhatian misalnya sebagai satu taktik berpikir cepat yang bisa Anda terapkan; apa salahnya mencoba.
PYTHONUNBUFFERED=1 && fab ...
sedikit membantu dengan menunjukkan setiap server saat selesai alih-alih menunggu semua selesai. Masih ingin mencari solusi yang sepenuhnya realtime.