2011-06-19 48 views

Trả lời

1

Hãy xem câu trả lời sau: Fail hudson build with groovy script. Bạn có thể truy cập vào công việc ngược dòng và không xây dựng NHƯNG ... hãy cẩn thận với thực tế rằng các hành động hậu xây dựng của Hudson/Jenkins ngay bây giờ không cho phép chỉ định bất kỳ thứ tự nào: nếu kịch bản lệnh groovy của bạn được chỉ định ngoài việc xây dựng bài đăng khác hành động, và những hành động đó ảnh hưởng đến kết quả của việc xây dựng (ví dụ: phân tích các kết quả kiểm tra), sau đó bạn sẽ không thể cập nhật trạng thái của công việc ngược dòng nếu Jenkins quyết định chạy chúng sau tập lệnh groovy của bạn.

14

Đảm bảo bạn đang sử dụng đúng bước để thực hiện các công việc hạ lưu của mình; Tôi phát hiện ra rằng kể từ khi tôi đang thực hiện của tôi như là một "bài xây dựng bước", tôi đã không có "Block cho đến khi các dự án được kích hoạt hoàn thành xây dựng của họ" tùy chọn. Thay đổi điều đó thành "xây dựng tác vụ" trái ngược với "nhiệm vụ xây dựng bài đăng", cho phép tôi tìm các tùy chọn bạn đang tìm kiếm trong Plugin kích hoạt tham số.

enter image description here

+0

điều duy nhất tôi muốn thêm là một công việc bị chặn vẫn chiếm một người thi hành xây dựng nên các đường ống dài bạn cần phải lưu ý đến điều đó. Cảm ơn rất nhiều cho câu trả lời này mặc dù - đã cố gắng để làm cùng một bản thân mình và thậm chí không nghĩ về việc sử dụng một Bước Xây dựng. – Jason

+0

điều này sử dụng "postbuild-task" plugin sau đó? –

+0

tìm thấy nó cảm ơn (xin vui lòng bỏ qua câu hỏi cuối cùng của tôi) –

4

mã này sẽ đánh dấu sự thượng nguồn xây dựng không ổn định/không dựa trên tình trạng công việc hạ lưu.

/************************************************* 
Description: This script needs to put in Groovy 
Postbuild plugin of Jenkins as a Post Build task. 
*************************************************/ 

import hudson.model.* 

void log(msg) { 
    manager.listener.logger.println(msg) 
} 

def failRecursivelyUsingCauses(cause) { 
    if (cause.class.toString().contains("UpstreamCause")) { 
     def projectName = cause.upstreamProject 
     def number = cause.upstreamBuild 
     upstreamJob = hudson.model.Hudson.instance.getItem(projectName) 
     if(upstreamJob) { 
      upbuild = upstreamJob.getBuildByNumber(number) 
      if(upbuild) { 
       log("Setting to '" + manager.build.result + "' for Project: " + projectName + " | Build # " + number) 
       //upbuild.setResult(hudson.model.Result.UNSTABLE) 
       upbuild.setResult(manager.build.result); 
       upbuild.save() 

       // fail other builds 
       for (upCause in cause.upstreamCauses) { 
        failRecursivelyUsingCauses(upCause) 
       } 
      } 
     } else { 
      log("No Upstream job found for " + projectName); 
     } 
    } 
} 


if(manager.build.result.isWorseOrEqualTo(hudson.model.Result.UNSTABLE)) { 
    log("****************************************"); 
    log("Must mark upstream builds fail/unstable"); 
    def thr = Thread.currentThread() 
    def build = thr.executable 
    def c = build.getAction(CauseAction.class).getCauses() 

    log("Current Build Status: " + manager.build.result); 
    for (cause in c) { 
     failRecursivelyUsingCauses(cause) 
    } 
    log("****************************************"); 
} 
else { 
    log("Current build status is: Success - Not changing Upstream build status"); 
} 
+0

Có thể làm cho nó đánh dấu các công việc thượng nguồn như THÀNH CÔNG trong trường hợp xây dựng lại công việc thất bại? – yair

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