Bird
Raised Fist0
Jenkinsdevops~10 mins

Email notifications in pipelines in Jenkins - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Email notifications in pipelines
Pipeline starts
↓
Run build steps
↓
Check build result
↓
Send success email
↓
Pipeline ends
The pipeline runs build steps, then checks the result. Based on success or failure, it sends the appropriate email notification before ending.
Execution Sample
Jenkins
pipeline {
  agent any
  stages {
    stage('Build') {
      steps { echo 'Building...' }
    }
  }
  post {
    success { mail to: 'team@example.com', subject: 'Build Success', body: 'The build succeeded.' }
    failure { mail to: 'team@example.com', subject: 'Build Failed', body: 'The build failed.' }
  }
}
This Jenkins pipeline sends an email after the build stage, notifying success or failure.
Process Table
StepActionBuild ResultEmail SentEmail Subject
1Start pipelineN/ANoN/A
2Run build stageSuccessNoN/A
3Check build resultSuccessNoN/A
4Send success emailSuccessYesBuild Success
5End pipelineSuccessNoN/A
💡 Pipeline ends after sending success email because build result is success.
Status Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
buildResultN/ASuccessSuccessSuccessSuccess
emailSentNoNoNoYesYes
emailSubjectN/AN/AN/ABuild SuccessBuild Success
Key Moments - 2 Insights
Why is no email sent immediately after the build stage?
Because the pipeline waits until the build result is known (Step 3) before deciding which email to send, as shown in the execution_table rows 2 and 3.
What happens if the build fails instead of succeeding?
The pipeline sends a failure email instead of a success email, changing the emailSubject and emailSent variables accordingly, similar to Step 4 but for failure.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step is the email actually sent?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Check the 'Email Sent' column in the execution_table to see when it changes to 'Yes'.
According to the variable tracker, what is the value of 'buildResult' after Step 3?
AN/A
BSuccess
CFailure
DUnknown
💡 Hint
Look at the 'buildResult' row under 'After Step 3' in variable_tracker.
If the build had failed, which email subject would appear in the execution table at Step 4?
ABuild Failed
BBuild Success
CBuild Started
DNo Email
💡 Hint
Refer to the key_moments explanation about failure email subject.
Concept Snapshot
Jenkins pipeline email notifications:
- Use 'post' block to send emails after stages
- 'success' and 'failure' conditions trigger different emails
- 'mail' step sends email with to, subject, body
- Emails send only after build result is known
- Helps notify team about build status automatically
Full Transcript
This Jenkins pipeline example shows how email notifications work. The pipeline starts and runs the build stage. After the build finishes, it checks if the build succeeded or failed. If successful, it sends a success email; if failed, it sends a failure email. The execution table traces each step, showing when the email is sent. The variable tracker follows the build result and email status. Key moments clarify why emails are sent only after the build result is known and what changes if the build fails. The visual quiz tests understanding of when emails send and variable values. The snapshot summarizes how to use the post block and mail step for notifications.

Practice

(1/5)
1. What is the main purpose of adding email notifications in Jenkins pipelines?
easy
A. To increase the number of pipeline stages
B. To speed up the pipeline execution
C. To automatically inform team members about pipeline success or failure
D. To reduce the size of the pipeline script

Solution

  1. Step 1: Understand the role of email notifications

    Email notifications are used to keep team members informed about the status of the pipeline automatically.
  2. Step 2: Identify the correct purpose

    Speeding up execution, increasing stages, or reducing script size are unrelated to email notifications.
  3. Final Answer:

    To automatically inform team members about pipeline success or failure -> Option C
  4. Quick Check:

    Email notifications = Inform team automatically [OK]
Hint: Email notifications alert teams about pipeline results [OK]
Common Mistakes:
  • Thinking email notifications speed up pipelines
  • Confusing notifications with pipeline structure changes
  • Assuming notifications reduce script size
2. Which Jenkins pipeline syntax correctly sends an email notification only on failure using the post section?
easy
A. post { failure { emailext to: 'team@example.com', subject: 'Build Failed', body: 'Check the logs.' } }
B. post { always { emailext to: 'team@example.com', subject: 'Build Failed', body: 'Check the logs.' } }
C. post { success { emailext to: 'team@example.com', subject: 'Build Failed', body: 'Check the logs.' } }
D. post { failure { mail to: 'team@example.com', subject: 'Build Failed', body: 'Check the logs.' } }

Solution

  1. Step 1: Identify correct post condition for failure

    The failure block runs only when the pipeline fails, which is correct here.
  2. Step 2: Check the email sending syntax

    emailext is the correct step for sending emails with extended options; mail is less common and may lack features.
  3. Final Answer:

    post { failure { emailext to: 'team@example.com', subject: 'Build Failed', body: 'Check the logs.' } } -> Option A
  4. Quick Check:

    Failure + emailext = Correct syntax [OK]
Hint: Use 'post { failure { emailext ... } }' for failure emails [OK]
Common Mistakes:
  • Using 'always' instead of 'failure' for failure-only emails
  • Using 'success' block for failure notifications
  • Using 'mail' instead of 'emailext' without plugin support
3. Given this Jenkins pipeline snippet, what will happen when the build succeeds?
post {
  success {
    emailext to: 'dev@example.com', subject: 'Build Success', body: 'Good job!'
  }
  failure {
    emailext to: 'dev@example.com', subject: 'Build Failed', body: 'Please check.'
  }
}
medium
A. Both success and failure emails are sent
B. An email with subject 'Build Failed' is sent to dev@example.com
C. No email is sent
D. An email with subject 'Build Success' is sent to dev@example.com

Solution

  1. Step 1: Understand post conditions for success

    The success block triggers only when the build finishes successfully.
  2. Step 2: Identify which email is sent on success

    The email with subject 'Build Success' is sent to 'dev@example.com' in the success block.
  3. Final Answer:

    An email with subject 'Build Success' is sent to dev@example.com -> Option D
  4. Quick Check:

    Success block sends success email [OK]
Hint: Success block emails only on successful builds [OK]
Common Mistakes:
  • Confusing failure email with success email
  • Thinking no email is sent on success
  • Assuming both emails send regardless of build result
4. You wrote this Jenkins pipeline snippet to send failure emails, but no emails are sent on failure:
post {
  failure {
    mail to: 'team@example.com', subject: 'Build Failed', body: 'Fix it!'
  }
}

What is the likely problem?
medium
A. The 'failure' block should be 'always' to send emails on failure
B. The 'mail' step requires proper configuration; use 'emailext' instead
C. The 'to' field must be inside quotes like "to: 'team@example.com'"
D. The 'body' field is missing a required parameter

Solution

  1. Step 1: Check the email step used

    The mail step is basic and may not work without proper setup; emailext from the Email Extension plugin is recommended for reliable emails.
  2. Step 2: Confirm correct step for failure emails

    Using emailext ensures emails are sent with more options and better support in pipelines.
  3. Final Answer:

    The 'mail' step requires proper configuration; use 'emailext' instead -> Option B
  4. Quick Check:

    Use emailext for failure emails [OK]
Hint: Use 'emailext' not 'mail' for reliable email notifications [OK]
Common Mistakes:
  • Using 'mail' without proper configuration
  • Confusing 'failure' with 'always' block
  • Incorrect quoting of parameters
5. You want to send an email notification only if the build fails and the failure is caused by a test failure. Which Jenkins pipeline snippet correctly implements this logic?
hard
A. post { failure { script { if (currentBuild.rawBuild.getLog(100).any { it.contains('TEST-FAILURE') }) { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } } } }
B. post { always { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } }
C. post { failure { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } }
D. post { success { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } }

Solution

  1. Step 1: Understand the requirement for conditional email on test failure

    The email should send only if the build fails and the failure is due to test failures, so a condition checking the build log is needed.
  2. Step 2: Analyze the options for conditional logic

    post { failure { script { if (currentBuild.rawBuild.getLog(100).any { it.contains('TEST-FAILURE') }) { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } } } } uses a script block to check the build log for 'TEST-FAILURE' text before sending the email, matching the requirement exactly.
  3. Step 3: Exclude other options

    post { always { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } } sends email always, ignoring failure condition. post { failure { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } } sends email on any failure, not just test failures. post { success { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } } sends email on success, which is incorrect.
  4. Final Answer:

    post { failure { script { if (currentBuild.rawBuild.getLog(100).any { it.contains('TEST-FAILURE') }) { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } } } } -> Option A
  5. Quick Check:

    Conditional script in failure block = post { failure { script { if (currentBuild.rawBuild.getLog(100).any { it.contains('TEST-FAILURE') }) { emailext to: 'qa@example.com', subject: 'Test Failure', body: 'Tests failed!' } } } } [OK]
Hint: Use script block to check logs inside failure post section [OK]
Common Mistakes:
  • Sending emails on all failures without checking cause
  • Using 'always' or 'success' blocks incorrectly
  • Not using script block for conditional logic
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard