2013-09-23 57 views
7

Tôi có một Dự án MultiJob (được tạo bằng plugin Jenkins Multijob), với một loạt các Giai đoạn MultiJob. Giả sử một trong những công việc này được gọi là SubJob01. Các công việc được xây dựng được cấu hình với tùy chọn "Hạn chế nơi dự án này có thể chạy" được gắn với một nút. SubJob01 được gắn với Slave01.Có Jenkins Thất bại Nhanh khi Node Đang Ngoại tuyến

Tôi muốn nếu các công việc này thất bại nhanh khi nút đang ngoại tuyến, thay vì nói "(đang chờ xử lý — slave01 đang ngoại tuyến)". Cụ thể, tôi muốn có một bản ghi về nỗ lực xây dựng trong SubJob01, với việc xây dựng được đánh dấu là không thành công. Bằng cách này, tôi có thể cấu hình dự án MultiJob của mình để xử lý tình huống như tôi muốn, thay vì sử dụng plugin thời gian chờ của Jenkins để hủy bỏ toàn bộ điều.

Có ai biết cách xây dựng không thành công nhanh không nếu tất cả các nút đều ngoại tuyến? Tôi có thể xen kẽ dự án MultiJob với các kịch bản Groovy của hệ thống để kiểm tra xem các nút mong muốn có ngoại tuyến hay không, nhưng dường như nó đang được phát minh lại, ở vị trí sai, những gì đã là một tính năng.

+0

Tôi không biết chức năng hiện tại sẽ thực hiện việc này, nhưng bạn có thể thêm một bước thực thi trình bao telnet đến cổng của Slave (22)? – JamesE

Trả lời

1

Tôi đã kết thúc việc tạo giải pháp này đã hoạt động tốt. Bước xây dựng đầu tiên của SubJob01 là một tập lệnh Hệ thống thực thi Groovy, và đây là tập lệnh:

import java.util.regex.Matcher 
import java.util.regex.Pattern 

int exitcode = 0 
println("Looking for Offline Slaves:"); 
for (slave in hudson.model.Hudson.instance.slaves) { 
if (slave.getComputer().isOffline().toString() == "true"){ 
println(' * Slave ' + slave.name + " is offline!"); 
    if (slave.name == "Slave01") { 
    println(' !!!! This is Slave01 !!!!'); 
    exitcode++; 
    } // if slave.name 
    } // if slave offline 
} // for slave in slaves 

println("\n\n"); 
println "Slave01 is offline: " + hudson.model.Hudson.instance.getNode("Slave01").getComputer().isOffline().toString(); 
println("\n\n"); 

if (exitcode > 0){ 
println("The Slave01 slave is offline - we can not possibly continue...."); 
println("Please contact IT to resolve the slave down issue before retrying the build."); 
return 1; 
} // if 

println("\n\n");