2017-09-28 67 views
5

Tôi đang cố gắng để kích hoạt một công việc ở hạ nguồn từ công việc hiện tại của tôi như vậyJenkins thất bại vào việc xây dựng một công việc hạ lưu

pipeline { 
    stages { 
    stage('foo') { 
     steps{ 
     build job: 'my-job', propagate: true, wait: true 
     } 
    } 
    } 
} 

Mục đích là để chờ đợi vào kết quả công việc và thất bại hay thành công theo kết quả đó. Jenkins luôn thất bại với thông điệp Waiting for non-job items is not supported. Công việc được đề cập ở trên không có bất kỳ tham số nào và được định nghĩa như phần còn lại của công việc của tôi, bằng cách sử dụng plugin đường ống dẫn multibranch.

Tất cả những gì tôi có thể nghĩ là loại mục jenkins này không được hỗ trợ làm đầu vào bước xây dựng, nhưng điều đó có vẻ phản trực giác và sẽ chứng minh là trình chặn đối với tôi. Bất cứ ai có thể xác nhận nếu điều này thực sự là trường hợp?

Nếu có, bất kỳ ai cũng có thể đề xuất bất kỳ giải pháp nào không?

Cảm ơn bạn

+1

Tôi đang xử lý khá nhiều vấn đề tương tự ở đây. Thật không may, chỉ có tài liệu khác tôi có thể tìm thấy về chủ đề này là một bài đăng StackOverflow khác từ tháng Tư: https://stackoverflow.com/questions/43337070/how-to-invoke-a-jenkins-pipeline-a-in-another-jenkins- pipeline-b –

Trả lời

1

này trông giống như JENKINS-45443 trong đó bao gồm những nhận xét

đường ống không có người hỗ trợ cho các hệ thống công việc ngược dòng/hạ lưu, một phần là do hạn chế về kỹ thuật, một phần là do thực tế là không có cấu hình công việc tĩnh nào có thể thực hiện việc này trừ khi kiểm tra siêu dữ liệu xây dựng gần đây.

Nhưng nó cũng cung cấp cách giải quyết:

miễn là giải pháp vẫn còn đang diễn ra, tôi có ở đây workaround của chúng tôi. Nó có trụ sở tại rtp (Rich Text Publisher) plugin, mà bạn nên cài đặt để nó hoạt động:

Vào cuối Jenkinsfile của chúng tôi và sau khi kích hoạt công việc, chúng tôi đợi nó kết thúc. Trong trường hợp đó, build() trả về đối tượng được sử dụng để chạy lệnh hạ lưu. Chúng tôi nhận được thông tin từ nó.

Cảnh báo: getAbsoluteUrl() là một chức năng quan trọng. Sử dụng nó có nguy cơ của riêng bạn!

def startedBld = build(
    job: YOUR_DOWNSTREAM_JOB, 
    wait: true, // VERY IMPORTANT, otherwise build() does not return expected object 
    propagate: true 
) 

// Publish the started build information in the Build result 
def text = '<h2>Downstream jobs</h2>Started job <a href="' + startedBld.rawBuild.getAbsoluteUrl() + '">' + startedBld.rawBuild.toString() + '</a>' 
rtp (nullAction: '1',parserName: 'HTML', stableText: text) 

Vấn đề này là một phần của JENKINS-29913, mở ra cho hai năm qua:

Hiện nay DependencyGraph được giới hạn trong AbstractProject, làm cho nó không thể đối với quy trình công việc để tham gia vào thượng nguồn/downstream các mối quan hệ (trong trường hợp yêu cầu chuỗi công việc, ví dụ do các ràng buộc về bảo mật).

Nó đề cập đến RFE (Yêu cầu nâng cao) JENKINS-37718, dựa trên khác (chưa được trả lời) Stack Overflow question.

7

Tôi thực sự đã cố gắng khắc phục điều này bằng cách chú ý nhiều hơn đến định nghĩa của bước xây dựng. Vì tất cả các công việc hạ lưu của tôi được định nghĩa là các công việc đường ống đa nguyên, cấu trúc của chúng giống như thư mục, với mỗi mục trong thư mục thể hiện một công việc riêng biệt. Vì vậy, cách chính xác để gọi các công việc ở hạ lưu không phải là build job: 'my-job', propagate: true, wait: true, mà là build job: "my-job/my-branch-name", propagate: true, wait: true.

Ngoài ra, không liên quan đến câu hỏi nhưng có liên quan đến vấn đề, hãy đảm bảo bạn luôn có ít nhất một trình xử lý miễn phí trên máy jenkins, vì việc chờ đợi trên cú pháp sẽ tiêu thụ một luồng cho công việc chờ đợi và một cho công việc đang chờ đợi, và bạn có thể dễ dàng tìm thấy chính mình trong một tình huống loại đói.

Hy vọng điều này sẽ giúp

+0

Vì vậy, lỗi tôi đã đề cập không áp dụng ở đây? +1 anyway. – VonC

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