почему работа Дженкинса не терпит неудачу - даже если сценарий npm терпит неудачу в стадии? - PullRequest
0 голосов
/ 17 апреля 2020

У меня следующий Jenkinsfile:

        stage('build mod') {
            steps {
                dir("cli") {
                    script {
                        try {
                            sh('node index.js -m shell -h project -p max4 -i local')
                        } catch (Exception e) {
                            currentBuild.result = 'FAILURE'
                            throw e
                        }
                    }
                }
            }
        }

Сценарий не выполняется:

 ERROR  Build failed with errors.

npm ERR! This is probably not a problem with npm. There is likely additional logging output above.


npm ERR! A complete log of this run can be found in:

npm ERR!     /home/jenkins/.npm/_logs/-debug.log

Но этап проходит с зеленым ... Почему в этом случае не работает try-catch?

1 Ответ

1 голос
/ 20 апреля 2020

Прежде всего, вам нужно понять, что, хотя код внутри скрипта потерпел неудачу, функция оболочки, которую вызвал jenkinsfile, была успешной. Вот почему jenkinsfile не смог перехватить ошибку, так как скрипт вернул 0. Поэтому вам нужно написать код, который перехватит возвращаемое значение кода, выполняемого внутри скрипта. Нечто похожее на

result = sh (
    script: "node index.js -m shell -h project -p max4 -i local",
    returnStatus: true
)
if (result != 0) {
    currentBuild.result = 'FAILURE'
    break
}

Здесь «разрыв» очень важен, так как мы не хотим, чтобы другие этапы выполнялись после сбоя сборки.

...