在Jenkinsfile失败时获取错误原因

Sar*_*ica 5 jenkins jenkins-pipeline

我有以下post失败部分:

   post {
        failure {
            mail subject: "\u2639 ${env.JOB_NAME} (${env.BUILD_NUMBER}) has failed",
                    body: """Build ${env.BUILD_URL} is failing!
                          |Somebody should do something about that""",
                      to: "devel@example.com",
                 replyTo: "devel@example.com",
                    from: 'jenkins@example.com'
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想在错误消息的正文中包含构建失败的原因.

我怎样才能做到这一点?

如果没有,有没有办法将构建日志文件附加到电子邮件?

Pat*_* M. 7

我不知道如何通过空气自动检索故障原因.

但是,您可以在每个阶段使用"post {failure {"块来捕获至少其失败的阶段到环境变量(例如env.FAILURE_REASON),并在最终(全局范围)通知块中访问env var .

要获得更多粒度,您可以重用相同的全局env变量机制,但使用try {} catch {}块来捕获哪个特定步骤失败.

一个通用的例子是:

   pipeline {
     stages {
       stage('Build') {
         steps {
           ...
         }
         post {
           failure {
             script { env.FAILURE_STAGE = 'Build' }
           }
         }
       }
       stage('Deploy') {
         steps {
           ...
         }
         post {
           failure {
             script { env.FAILURE_STAGE = 'Deploy' }
           }
         }
       }
       ...
     }
     post {
        failure {
            mail subject: "\u2639 ${env.JOB_NAME} (${env.BUILD_NUMBER}) has failed",
                    body: """Build ${env.BUILD_URL} is failing in ${env.FAILURE_STAGE} stage!
                          |Somebody should do something about that""",
                      to: "devel@example.com",
                 replyTo: "devel@example.com",
                    from: 'jenkins@example.com'
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

从技术上讲,您甚至可以根据失败的阶段进行一些自动分类,并发送更具针对性的通知,甚至可以创建特定的(例如Jira)票证.

要将控制台日志附加到电子邮件通知,您需要查看 emailext和'attachLog:true'属性