Bird
Raised Fist0
Jenkinsdevops~5 mins

Post section (success, failure, always) in Jenkins - Commands & Configuration

Choose your learning style10 modes available
Introduction
In Jenkins pipelines, you often want to run specific steps after your main tasks finish. The post section lets you do this based on whether the build succeeded, failed, or always runs regardless of the result.
When you want to send a notification only if the build succeeds.
When you need to clean up temporary files if the build fails.
When you want to always archive logs no matter the build result.
When you want to trigger another job only after a successful build.
When you want to send alerts or emails if the build fails.
Config File - Jenkinsfile
Jenkinsfile
pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        echo 'Building the project'
      }
    }
  }
  post {
    success {
      echo 'Build succeeded! Sending success notification.'
    }
    failure {
      echo 'Build failed! Sending failure alert.'
    }
    always {
      echo 'This always runs. Archiving logs.'
    }
  }
}

This Jenkinsfile defines a simple pipeline with one build stage.

The post section has three blocks:

  • success: runs only if the build succeeds.
  • failure: runs only if the build fails.
  • always: runs no matter what happened in the build.

This helps you run cleanup, notifications, or other tasks based on build results.

Commands
This command updates the Jenkins pipeline job with the Jenkinsfile containing the post section. It applies the pipeline configuration to Jenkins.
Terminal
jenkins-jobs --conf jenkins.ini update Jenkinsfile
Expected OutputExpected
Job updated successfully
This command triggers the Jenkins pipeline job to run the build and post steps.
Terminal
jenkins-cli build my-pipeline-job
Expected OutputExpected
[Pipeline] Start of Pipeline [Pipeline] echo Building the project [Pipeline] echo Build succeeded! Sending success notification. [Pipeline] echo This always runs. Archiving logs. [Pipeline] End of Pipeline Finished: SUCCESS
This command triggers the pipeline but simulates a failure to show how the failure and always post blocks run.
Terminal
jenkins-cli build my-pipeline-job -p FORCE_FAIL=true
Expected OutputExpected
[Pipeline] Start of Pipeline [Pipeline] echo Build failed! Sending failure alert. [Pipeline] echo This always runs. Archiving logs. [Pipeline] End of Pipeline Finished: FAILURE
→
-p - Passes parameters to the build
Key Concept

The post section lets you run steps after the main pipeline, triggered only on success, failure, or always, to handle notifications and cleanup.

Common Mistakes
Putting post steps inside stages instead of the pipeline level
Post steps inside stages run only after that stage, not after the whole pipeline, causing unexpected behavior.
Place the post section at the pipeline level to run steps after the entire pipeline finishes.
Using post { always { ... } } but expecting it to run only on failure
The always block runs no matter what, so it will run on success and failure, which can cause duplicate notifications.
Use post { failure { ... } } for failure-only actions and post { always { ... } } for cleanup tasks.
Summary
Use the post section in Jenkinsfile to run steps after the pipeline finishes.
The success block runs only if the build succeeds.
The failure block runs only if the build fails.
The always block runs regardless of build result for cleanup or archiving.

Practice

(1/5)
1. What is the purpose of the post section in a Jenkins pipeline?
easy
A. To run steps after the main pipeline or stage finishes
B. To define environment variables for the pipeline
C. To specify the build agent for the pipeline
D. To declare input parameters for the pipeline

Solution

  1. Step 1: Understand the role of the post section

    The post section is designed to run steps after the main pipeline or stage finishes, regardless of success or failure.
  2. Step 2: Compare with other pipeline sections

    Other sections like environment, agent, and parameters serve different purposes, not for post-run steps.
  3. Final Answer:

    To run steps after the main pipeline or stage finishes -> Option A
  4. Quick Check:

    Post section = run after pipeline [OK]
Hint: Post section always runs after pipeline ends [OK]
Common Mistakes:
  • Confusing post with environment or agent sections
  • Thinking post runs before pipeline starts
  • Assuming post only runs on failure
2. Which of the following is the correct syntax to run a step only when the pipeline succeeds in the post section?
easy
A. post { always { echo 'Done' } }
B. post { success { echo 'Build succeeded' } }
C. post { failure { echo 'Build failed' } }
D. post { cleanup { echo 'Cleaning up' } }

Solution

  1. Step 1: Identify the correct post condition for success

    The success block runs only when the pipeline finishes successfully.
  2. Step 2: Check syntax correctness

    post { success { ... } } is the correct syntax. Other options use wrong conditions or invalid keywords.
  3. Final Answer:

    post { success { echo 'Build succeeded' } } -> Option B
  4. Quick Check:

    Success block runs on success [OK]
Hint: Use 'success' block for success-only steps [OK]
Common Mistakes:
  • Using 'always' instead of 'success' for success-only steps
  • Using invalid keywords like 'cleanup'
  • Confusing 'failure' with 'success'
3. Given this Jenkins pipeline snippet, what will be printed if the build fails?
pipeline {
  agent any
  stages {
    stage('Test') {
      steps {
        sh 'exit 1'
      }
    }
  }
  post {
    success {
      echo 'Build succeeded'
    }
    failure {
      echo 'Build failed'
    }
    always {
      echo 'Build finished'
    }
  }
}
medium
A. Build failed Build finished
B. Build succeeded
C. Build succeeded Build finished
D. Build finished

Solution

  1. Step 1: Analyze the build result

    The shell command sh 'exit 1' causes the build to fail.
  2. Step 2: Determine which post blocks run on failure

    The failure block runs on failure, printing 'Build failed'. The always block runs regardless, printing 'Build finished'. The success block does not run.
  3. Final Answer:

    Build failed Build finished -> Option A
  4. Quick Check:

    Failure + always blocks run on failure [OK]
Hint: Failure and always blocks run on failure [OK]
Common Mistakes:
  • Assuming success block runs on failure
  • Ignoring the always block
  • Thinking only failure block runs
4. Identify the error in this Jenkins pipeline post section:
post {
  success {
    echo 'Success!'
  }
  failure {
    echo 'Failure!'
  }
  always {
    echo 'Always runs'
  }
  cleanup {
    echo 'Cleaning up'
  }
}
medium
A. The 'always' block should be named 'alwaysRun'
B. The 'failure' block must come before 'success'
C. The 'cleanup' block is invalid in the post section
D. The 'echo' commands must be inside 'steps' block

Solution

  1. Step 1: Review valid post condition blocks

    Valid blocks are success, failure, always, unstable, and changed. There is no cleanup block.
  2. Step 2: Check syntax of echo commands

    The echo commands can be used directly in post blocks. The order of blocks does not matter.
  3. Final Answer:

    The 'cleanup' block is invalid in the post section -> Option C
  4. Quick Check:

    Only success, failure, always allowed [OK]
Hint: Post section allows only specific blocks like success, failure, always [OK]
Common Mistakes:
  • Adding unsupported blocks like 'cleanup'
  • Thinking block order matters
  • Wrapping echo in steps inside post (not needed)
5. You want to send a notification only if the build fails, but also always archive the build logs regardless of the result. Which post section correctly implements this?
hard
A. post { failure { mail to: 'team@example.com' archiveArtifacts 'logs/**' } }
B. post { always { mail to: 'team@example.com' } failure { archiveArtifacts 'logs/**' } }
C. post { success { mail to: 'team@example.com' } always { archiveArtifacts 'logs/**' } }
D. post { failure { mail to: 'team@example.com' } always { archiveArtifacts 'logs/**' } }

Solution

  1. Step 1: Identify notification condition

    Notification should run only on failure, so it belongs in the failure block.
  2. Step 2: Identify archiving condition

    Archiving logs should happen always, so it belongs in the always block.
  3. Step 3: Check syntax correctness

    post { failure { mail to: 'team@example.com' } always { archiveArtifacts 'logs/**' } } correctly separates the two actions into failure and always blocks. post { failure { mail to: 'team@example.com' archiveArtifacts 'logs/**' } } puts both actions in the failure block, so archiving occurs only on failure.
  4. Final Answer:

    post { failure { mail to: 'team@example.com' } always { archiveArtifacts 'logs/**' } } -> Option D
  5. Quick Check:

    Failure for notify, always for archive [OK]
Hint: Use failure for notify, always for archive [OK]
Common Mistakes:
  • Putting always steps inside failure block
  • Sending notifications on success instead of failure
  • Missing proper syntax for multiple steps
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