Не удалось поймать org.jenkinsci.плагины.рабочий процесс.шаги.Исключение FlowInterruptedException во время ожидания

#jenkins #automation #jenkins-pipeline #timeout #mocha.js

Вопрос:

При использовании декларативного конвейера на Дженкинсе блок тайм-аута должен прервать все задание в соответствии с документацией конвейера Дженкинса. Похоже, что в моем случае тайм-аут происходит во время сценария оболочки, в котором выполняется набор тестов мокко, и мокко переводит SIGTERM в тестовую ошибку. Когда ошибка возвращается в файл Дженкинса, org.jenkinsci.plugins.workflow.steps.FlowInterruptedException ошибка больше не улавливается, и задание не прерывается. ПРАВКА: Похоже, что причиной является параллельная функциональность мокко, но не уверен, как с этим справиться.

Вот ошибка, которую mocha (версия 9) выдает при истечении времени ожидания.

 1) Uncaught error outside test suite:
     Uncaught Workerpool Worker terminated Unexpectedly
    exitCode: `null`
    signalCode: `SIGTERM`
    workerpool.script: `/var/lib/jenkins/workspace/jobName/path/node_modules/mocha/lib/nodejs/worker.js`
    spawnArgs: `/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node12.14.0/bin/node,/var/lib/jenkins/workspace/jobName/path/node_modules/mocha/lib/nodejs/worker.js`
    spawnfile: `/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node12.14.0/bin/node`
    stdout: `null`
    stderr: `null`

  Error: Workerpool Worker terminated Unexpectedly
      exitCode: `null`
      signalCode: `SIGTERM`
      spawnfile: `/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node12.14.0/bin/node`
      stdout: `null`
      stderr: `null`
  
      at ChildProcess.<anonymous> (node_modules/workerpool/src/WorkerHandler.js:292:13)
      at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)

 

Ниже приведен пример запуска файла jenkisfile.

 pipeline {
    agent any

    stages {
        stage("run-tests") {
                steps {
                    script {
                        try {
                            timeout (60) {
                               sh "npm run mocha-tests"
                               }
                        } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
                                echo "interrupt ${e.toString()}"
                        } catch (Throwable e) {
                                echo "regular ${e.toString()}"
                        }
                    }
            }
    }
}
          
 

Я бы хотел, чтобы работа была прервана по тайм-ауту. Что я могу сделать, чтобы гарантировать, что он прервется?