jenkins notifying error occured in different steps by sending mail in Pipeline (former known as Workflow)

后端 未结 3 1164
长情又很酷
长情又很酷 2020-12-06 13:20

I have a pipeline with multiple steps, for example:

stage \'dev - compile\'
node(\'master\') {
  //do something
}

stage \'test- compile\'
node(\'master\') {         


        
相关标签:
3条回答
  • 2020-12-06 13:48

    Well, your idea is absolutely correct, you just need to move mail after the catch block or use finally. Examples (in pseudocode):

    try {
        //code
        email = 'success'
    } catch(Exception e) { 
        // error handler: logging
        email = 'failure'
    }
    send email
    

    Or the same approach using the catchError pipeline built-in:

    result = 'failure'
    catchError { // this catches all exceptions and set the build result
        //code
        result = 'success' // we will reach this point only if no exception was thrown
    }
    send result 
    

    Or using finally:

    try {
        //code
    } finally { 
        send email
    }
    
    0 讨论(0)
  • 2020-12-06 13:59

    I think it is a better way to use the jenkins build in post section instead of using try catch:

    pipeline {
      agent any
        stages {
          stage('whatever') {
            steps {
              ...
            }
          }
        }
        post {
            always {
              step([$class: 'Mailer',
                notifyEveryUnstableBuild: true,
                recipients: "example@example.com",
                sendToIndividuals: true])
            }
          }
        }
      }
    }
    
    0 讨论(0)
  • 2020-12-06 14:05

    What I did to include useful information in my mail about the failure:

    try {
        stage 'checkout cvs'
        node('master') {
            /** CODE **/
        }
    
        stage 'compile'
        node('master') {
            /** CODE **/
        }
    
        stage 'test unit'
        node('master') {
            /** CODE **/
        }   
    
        stage 'package'
        node('master') {
            /** CODE **/
        }
    
        stage 'nexus publish'
        node('master') {
            /** CODE **/
        }
    
        stage 'Deploy to App Server'
        node('master') {
            /** CODE **/            
        }
    
    } catch(e) {
        String error = "${e}";
        // Make the string with job info, example:
        // ${env.JOB_NAME}
        // ${env.BUILD_NUMBER} 
        // ${env.BUILD_URL}
        // and other variables in the code
        mail bcc: '',
             cc: '',
             charset: 'UTF-8',
             from: '',
             mimeType: 'text/html',
             replyTo: '',
             subject: "ERROR CI: Project name -> ${env.JOB_NAME}",
             to: "${mails_to_notify}",
             body: "<b>${pivote}</b><br>\n\nMensaje de error: ${error}\n\n<br>Projecto: ${env.JOB_NAME} <br>Build Number: ${env.BUILD_NUMBER} <br> URL de build: ${env.BUILD_URL}";
        error "${error}"
    }
    
    0 讨论(0)
提交回复
热议问题