8

Chúng tôi sử dụng Jenkins cho hệ thống xây dựng CI của chúng tôi. Chúng tôi cũng sử dụng 'đồng thời xây dựng' để Jenkins sẽ xây dựng mỗi thay đổi một cách độc lập. Điều này có nghĩa là chúng tôi thường có 5 hoặc 6 bản dựng cùng một công việc đang chạy đồng thời. Để phù hợp với điều này, chúng tôi có 4 nô lệ với 12 người thi hành.Làm cách nào để sửa đổi hành vi cân bằng tải mà Jenkins sử dụng để kiểm soát nô lệ?

Vấn đề là Jenkins không thực sự 'cân bằng tải' giữa các nô lệ của nó. Nó cố gắng để xây dựng một công việc trên cùng một nô lệ mà nó được xây dựng trước đó (có lẽ là để giảm thời gian đồng bộ hóa từ kiểm soát nguồn). Đây là một vấn đề bởi vì Jenkins sẽ xây dựng tất cả 6 trường hợp xây dựng của chúng tôi trên cùng một nô lệ (hoặc nhiều khả năng giữa 2 nô lệ). Một máy xây dựng bị sa lầy và chạy rất chậm trong khi phần còn lại của chúng ngồi không hoạt động.

Có plugin hay thứ gì đó làm thay đổi hành vi cân bằng tải mà Jenkins sử dụng để kiểm soát nô lệ của nó không?

Trả lời

1

Nếu bạn không tìm thấy một plugin nào đó tự động, đây là một ý tưởng về những gì bạn có thể làm:

  • Install Node Label Parameter plugin
  • Thêm SLAVE tham số để công việc của bạn
  • Restrict công việc để chạy trên ${SLAVE}
  • Thêm công việc kích hoạt sẽ thực hiện như sau:

    • Phân tích phân phối tải thông qua Hệ thống Groovy Script và quyết định nút nào sẽ bắt đầu xây dựng tiếp theo.
    • Gửi bản dựng lên trên nút đó bằng Parametertized Trigger plugin bằng cách chỉ định giá trị phù hợp cho thông số SLAVE.

Để phân tích phân phối tải bạn cần phải cài đặt Groovy plugin và làm quen với Jenkins Main Module API. Dưới đây là some useful initial pointers.

+0

Có vẻ như không phải là một plugin mà thực hiện điều này (mà tôi có thể tìm thấy). Trong khi đề xuất này là rất nhiều hơn nữa ... 'tham gia' hơn là chỉ sử dụng một plugin, nó trông giống như lựa chọn tốt nhất của chúng tôi! –

3

Nếu máy xây dựng của bạn không thể xử lý thoải mái hơn 1 bản dựng, tại sao phải định cấu hình chúng với 12 trình thực thi? Nếu đó thực sự là trường hợp, bạn nên giảm số lượng người thi hành xuống 1. Jenkins của tôi có 30 nô lệ, mỗi người có 1 người thi hành.

+0

Nỗ lực Jenkins của chúng tôi xử lý nhiều tác vụ, một trong số đó là biên dịch mã của chúng tôi. Những nô lệ có 12 người thực thi vì nó có thể làm 12 thứ cùng một lúc (những bản dựng là 'lớn nhất' của những thứ này). Nó thậm chí có thể chạy 4-5 bản xây dựng tốt, nó chỉ làm chậm mọi thứ (và chúng tôi muốn phản hồi của các bản dựng này càng nhanh càng tốt). Bằng cách giảm những nô lệ này xuống 1 người thi hành, chúng tôi có 15 lõi ngồi nhàn rỗi phần lớn thời gian trong ngày, không phải là việc sử dụng tài nguyên rất hiệu quả. –

12

Chúng tôi đang đối mặt với một vấn đề tương tự. Vì vậy, tôi đã đặt cùng một plugin thay đổi Load Balancer trong Jenkins để chọn một nút hiện có tải ít nhất - https://wiki.jenkins-ci.org/display/JENKINS/Least+Load+Plugin

Mọi phản hồi đều được đánh giá cao.

+0

Tuyệt vời, cảm ơn!Ngày xây dựng plugin mới nhất hiện là "ngày 27 tháng 6 năm 2013". Có tương thích với các phiên bản Jenkins mới hơn không, ví dụ: 1.625.3? – t0r0X

+0

Tôi hiện đang sử dụng nó với 1.625.2 – bstick12

+0

một lần nữa, tôi sẽ thử! – t0r0X