2016-05-16 19 views
14

tôi có mã tương tự như dưới đây trong Jenkinsfile tôi:try/catch/finally mặt nạ Jenkinsfile vấn đề trong trường hợp ngoại lệ biên dịch groovy

node { 
    checkout scm 
    // do some stuff 
    try { 
     // do some maven magic 
    } catch (error) { 
     stage "Cleanup after fail" 
     emailext attachLog: true, body: "Build failed (see ${env.BUILD_URL}): ${error}", subject: "[JENKINS] ${env.JOB_NAME} failed", to: '[email protected]' 
     throw error 
    } finally { 
     step $class: 'JUnitResultArchiver', testResults: '**/TEST-*.xml' 
    } 
} 

Nếu mã trên không thành công vì một số lỗi Jenkins-đường ống liên quan trong try { } (ví dụ: sử dụng phương pháp tĩnh không được chấp thuận) tập lệnh không thành công. Khi tôi loại bỏ try/catch/finally, tôi có thể thấy lỗi. Tôi có làm gì sai không? Không nên rethrowing error làm cho các lỗi đường ống xuất hiện trong nhật ký?

CHỈNH SỬA: Tôi đã cố gắng giải quyết vấn đề theo cú pháp groovy, ví dụ: Tôi sử dụng biến chưa được chỉ định. Ví dụ: echo foo Nếu foo không được khai báo/chỉ định bất cứ nơi nào Jenkins sẽ không xây dựng và sẽ không hiển thị lý do nếu nó nằm trong thử/nắm bắt/cuối cùng sẽ trả về ngoại lệ.

+0

Nếu đây là Groovy đơn giản, có, nó sẽ hoạt động, nhưng vì đây là một DSL Groovy, các nhân viên DSL có thể làm bất cứ điều gì nó muốn với ngoại lệ ... Có lẽ bạn nên thử điều này thay vì: https: // jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-error-code-error-signal – Renato

+0

@RenatoBut https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/# code-catcherror-code-catch-error-và-set-build-results Đề nghị rằng hãy thử/catch/cuối cùng cũng nên làm việc –

+0

Phải, nhưng nếu bạn có vấn đề này trông giống như nó không ... – Renato

Trả lời

4

Điều này xảy ra khi ngoại lệ bổ sung được ném vào khối finally hoặc trước khi ném lại bên trong catch. Trong những trường hợp này, RejectedAccessException bị nuốt và script-security không bắt được.

+0

Không có ngoại lệ nào được ném vào bên trong cuối cùng, bởi vì nó hoạt động chính xác khi tôi xóa dòng vi phạm trong khối thử. –

+0

Sau đó, nó phải được trước khi ném lại bên trong bắt. – amuniz

+0

Không, dễ dàng sao chép nếu tập lệnh groovy sử dụng ví dụ: biến không khai báo. Không có ngoại lệ stack trace, khi tôi loại bỏ try/catch/cuối cùng tôi nhận được stacktrace. –

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