Tôi có một vài công việc trong Jenkins sử dụng Selenium để sửa đổi cơ sở dữ liệu thông qua giao diện người dùng của trang web. Nếu một số công việc này chạy cùng một lúc, các lỗi do đọc có thể bị hỏng. Có cách nào để buộc một số công việc nhất định trong Jenkins không thể chạy cùng một lúc? Tôi không muốn phải đặt hoặc lấy một khóa trên cơ sở dữ liệu, có thể được đọc hoặc sửa đổi bởi bất kỳ số lượng người dùng nào cũng đang thử nghiệm.Có cách nào để tạo việc làm trong Jenkins loại trừ lẫn nhau không?
Trả lời
Bạn muốn plugin Throttle Concurrent Builds cho phép bạn xác định các ẩn dụ chung và mỗi nút.
Ổ khóa và chốt đang được deprecated ủng hộ việc xây dựng đồng thời Throttle.
Tôi đã thử cả plugin locks & latches và plugin port allocator làm cách để đạt được những gì bạn đang cố gắng làm. Không làm việc đáng tin cậy cho tôi. Ổ khóa & chốt hoạt động một số thời gian, nhưng tôi thỉnh thoảng bị treo công việc. Sử dụng phân bổ cổng như là một hack sẽ làm việc trừ khi bạn có nhiều nút jenkins, nhưng chi phí cấu hình là loại cao. Những gì tôi cuối cùng đã giải quyết là một hack, nhưng nó hoạt động đáng tin cậy và sử dụng công cụ cốt lõi Jenkins (không có plugins):
- tạo một nút nô lệ chạy trên cùng một hộp với chủ (hoặc không, nếu bạn có nhiều ô trống)
- cho nô lệ này một chấp hành viên duy nhất (key)
- buộc 2 (hoặc n) công việc mà không phải chạy với nhau để nút này nô lệ mới
- tùy chọn thiết lập sử dụng của nô lệ cho 'chỉ việc gắn 'nếu nó sẽ làm hỏng các công việc khác của bạn nếu chúng xảy ra để chạy trên nô lệ mới
Vì nô lệ chỉ có một người thi hành, các công việc gắn liền với nó không bao giờ có thể chạy cùng nhau.
Tuyệt vời! Chỉ cần một lưu ý cho người mới bắt đầu như tôi: để buộc một công việc, sử dụng "Hạn chế nơi dự án này có thể được chạy" tùy chọn trong cấu hình công việc. – Linulin
Tôi không nhận thấy cảnh báo không được dùng nữa trên plugin Khóa & chốt, tôi sẽ cập nhật Jenkins của mình bằng plugin mới này, cảm ơn. –