2011-10-25 25 views
9

Tôi có một nhiệm vụ thực hiện trên n máy dựa trên nhãn. Nếu vì một lý do nào đó, một số máy này đang ngoại tuyến, tôi không muốn Jenkins xếp chúng vào hàng đợi và chờ cho đến khi chúng trực tuyến. Tôi muốn Jenkins thực hiện công việc trên các máy còn lại và hoàn thành công việc. Bất kỳ đề xuất?Jenkins: bỏ qua nếu nút đang ngoại tuyến

Sửa 1: tôi nhận ra rằng công việc được gắn với tất cả các máy: Screenshot

tôi đã buộc phải làm điều này bởi vì tôi cần công việc này để chạy đồng thời trên tất cả các máy. Vì vậy, câu hỏi của tôi vẫn giữ nguyên. Nếu một số máy trong số này đang ngoại tuyến, tôi muốn bỏ qua công việc trên chúng, thay vì chờ/xếp hàng.

Chỉnh sửa 2: Jenkins CLI có lệnh xếp hàng rõ ràng. Nó có vẻ hứa hẹn cho thời gian.

+0

Tôi đã mở yêu cầu tính năng trên Jenkins để cho phép Dự án Ma trận bỏ qua các nút ngoại tuyến: [https://issues.jenkins-ci.org/browse/JENKINS-29380](https://issues.jenkins-ci.org/ duyệt/JENKINS-29380). Xin vui lòng upvote nó nếu đó là những gì bạn cần. –

Trả lời

0

Nếu tác vụ được đính kèm theo cách nó chỉ chạy trên một nút cụ thể, nó sẽ không thể chạy trên các máy khác.

Nếu đó không phải là trường hợp thì nhiệm vụ sẽ chạy trên bất kỳ trình thực thi nào có sẵn, đây là hành vi mặc định.

Vì vậy, để kiểm tra xem tác vụ có thể chạy trên các nút khác, hãy chuyển đến công việc> định cấu hình và kiểm tra cài đặt sau đây.

enter image description here

Nếu đó là vô hiệu hóa vào các nhiệm vụ, sau đó bạn sẽ cần phải kiểm tra các nút rằng họ chấp nhận bất cứ công việc này có thể được tìm thấy dưới các thiết lập nút. Nó nên đọc như sau.

enter image description here

Goodluck.

+0

Xin lỗi, sau khi đọc câu trả lời của bạn, tôi đã kiểm tra lại cấu hình. Tôi thực sự gắn tất cả các máy vào công việc này, để buộc nó chạy đồng thời trên tất cả các máy. – publicRavi

+0

@publicRavi cũng nếu điều này giúp đánh dấu nó là câu trả lời đúng để người khác biết. – myusuf3

+0

Tôi không thấy cách giải quyết vấn đề của dự án Ma trận bị kẹt trên Trục của nút ngoại tuyến (tiếp tục đợi trong hàng đợi cho đến khi nút quay lại trực tuyến)? –

7

Một giải pháp tốt có thể đạt được bằng GroovyAxis Plugin và kịch bản sau đây, mà sẽ trở Axis danh sách nô lệ trực tuyến chỉ:

def axis = [] 
for (slave in hudson.model.Hudson.instance.slaves) { 
if (slave.getComputer().isOnline().toString() == "true") { 
    axis += slave.name 
} 
} 
return axis 

UPDATE: Kể từ khi Jenkins 2.0 API nút có đã được thay đổi, vì vậy hãy sử dụng Node.toComputer() thay thế: http://javadoc.jenkins-ci.org/hudson/model/Node.html#toComputer%28%29

def axis = [] 
for (slave in jenkins.model.Jenkins.instance.getNodes()) { 
if (slave.toComputer().isOnline()) { 
    axis += slave.getDisplayName() 
} 
} 
return axis 
+0

Lưu ý rằng danh sách này sẽ không bao gồm tổng thể. Nếu bạn muốn bạn phải thêm nó, ví dụ: thay thế 'def axis = []' bằng 'def axis = ['master']'. –

+0

Vì điều này đang chạy trong Groovy, bạn cũng có thể nói 'jenkins.model.Jenkins.instance.nodes' – jpyams

Các vấn đề liên quan