首页 > 解决方案 > 在 Jenkins Pipeline with Docker 的后期构建操作中似乎无法触发“失败”事件

问题描述

我目前正在开发一个非常简单的管道脚本来在 docker 映像中运行 node.js 脚本。

我的问题是,即使我的脚本最终在容器内出现错误,管道配置也认为该阶段是成功的。

从我现在在互联网上找到的内容来看,Jenkins 似乎使用了终止容器的 docker 进程的退出代码,而不是我在容器中运行的脚本的退出代码,所以我总是得到一个 0退出代码,并且我的发布脚本“失败”未执行。

任何人都知道我如何从容器内部获取退出代码?

另外,我想保持代理的语法不变,以避免在阶段手动键入 docker run 命令,因为我有很多环境变量要注入容器中。

所以这是我的 Jenkinsfile 的简化版本。失败了dostuff.js,但詹金斯仍然试图存档工件

pipeline {
    agent {
        docker { image 'node:10-alpine' }
    }

    environment {
        SOME_VAR = "some value"
    }

    stages {
        stage('Prepare to do stuff') {
            steps {
                sh 'npm i'
            }
        }

        stage('Do stuff') {
            steps {
                sh './dostuff.js'
            }
        }
    }

    post {
        success {
            archiveArtifacts artifacts: '*.stuf.json'
            echo 'Sending artifact to mailing list'
            emailext attachmentsPattern: '*.stuf.json', body: '', subject: "${env.JOB_NAME} #${env.BUILD_NUMBER}", to: 'me@me.com'
        }
        failure {
            echo 'Sending failure notifiation'
            emailext attachLog: true, body: '', subject: "Build failed in Jenkins: ${env.JOB_NAME} #${env.BUILD_NUMBER}", to: 'not-me@me.com'
        }
    }
}

非常感谢

标签: node.jsdockerjenkinsjenkins-pipeline

解决方案


通常,错误是使用退出代码触发的!= 0

几乎所有语言都有它。

在 JS 中process.exit(42)


推荐阅读