2016-05-16 20 views
14

durumunda sorunlar benim Jenkinsfile aşağıda benzer bir kod vardır: Yukarıdaki kod çünkü bazı Jenkins-boru hattı ile ilgili hatalar arasında başarısız olursadeneme/yakalama/nihayet maskeleri Jenkinsfile harika derleyici istisnalar

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' 
    } 
} 

try { } (örneğin onaylanmamış statik yöntem kullanarak) komut dosyası sessizce başarısız olur. Try/catch/nihayet kaldırdığımda hataları görebilirim. Yanlış bir şey yapıyorum? error'u yeniden işlemek, boru hattı hataları günlüğünde görünür mü?

DÜZENLEME: Ben harika sözdizimi, zaman mesela sorunu çivilemek başardınız Henüz atanmamış bir değişken kullanıyorum. Örnek: echo foo foo her yerde bildirilmez/atanmamışsa Jenkins yapıyı bozar ve istisnayı tekrarlayan try/catch/nihayetinde olup olmadığını göstermez.

+0

Eğer bu sade bir şekilde Groovy olsaydı, evet, işe yarayacaktı, ama bu Groovy DSL olduğundan, DSL koşucusu istisna ile istediği her şeyi yapabilir ... Belki de bunu denemelisiniz: 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-and-set-build-sonuç Önerir/yakala/nihayetinde de çalışmalı –

+0

Doğru, ama eğer bu problemi varsa ... – Renato

cevap

4

Bu, finally bloğunun içine ek bir istisna atıldığında veya catch içine yeniden atmadan önce gerçekleşir. Bu durumlarda RejectedAccessException yutulur ve script-security onu yakalamaz.

+0

Son olarak içeride bir istisna atılmadı çünkü try bloğundaki rahatsız edici çizgiyi kaldırdığımda düzgün çalışıyor. –

+0

Ardından, yakalama içindeki yeniden atmadan önce olmalı. – amuniz

+0

Nov, mükemmel bir komut dosyası kullanırsa kolayca tekrarlanabilir. beyan edilmemiş bir değişken. İstenmeyen bir yığın izlemesi yok, try/catch/remove'i kaldırdığımda stacktrace'i alırım. –