2015-08-27 2 views
1

У меня есть следующий рабочий процесс:Как переходящий в рабочем процессе, когда параллельная задача не

def flow 
node('envinf1') 
{ 
    def buildTasks = [:] 
    for(i = 0; i < 2; i++) { 
     buildTasks[i] = { 
      sh 'some command which fails in one of the tasks' 
     } 
    } 
    parallel buildTasks 
    echo 'Some message!' 
} 

Когда одна из задач, срывается рабочий процесс никогда не достигает echo ... -LINE и вместо того, чтобы вся работа завершается с исключение:

org.jenkinsci.plugins.workflow.cps.steps.ParallelStepException: Parallel step 0 failed at org.jenkinsci.plugins.workflow.cps.steps.ParallelStep$ResultHandler$Callback.checkAllDone(ParallelStep.java:153) ...

ли можно сказать parallel -шагового для ручной клади с помощью сценария рабочего процесса?

ответ

2
buildTasks[i] = { 
    try { 
     sh 'some command which fails in one of the tasks' 
    } catch (e) { 
     echo "got ${e} but continuing…" 
    } 
} 

Если вы хотите построить на провал в конце концов, вы можете использовать либо catchError шаг

buildTasks[i] = { 
    catchError { 
     sh 'some command which fails in one of the tasks' 
    } 
} 

или выписывать эквивалент вручную

buildTasks[i] = { 
    try { 
     sh 'some command which fails in one of the tasks' 
    } catch (e) { 
     echo "failed with ${e}" 
     currentBuild.result = 'FAILURE' 
    } 
} 

catchError действительно есть один преимущество над ручным эквивалентом: оно обрабатывает AbortException (например, отличный от нуля код выхода от sh) путем печати однострочных сообщений sage, FlowInterruptedException (например, пользователь нажал кнопку остановки), напечатав сообщение «отменил ...» и установив пользовательский результат (например, ABORTED) и все остальное, распечатав трассировку стека.