Bird
Raised Fist0
Jenkinsdevops~10 mins

Post section (success, failure, always) in Jenkins - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Post section (success, failure, always)
Start Pipeline
↓
Run Build Steps
↓
Check Build Result
↓
Post Success
↓
End Pipeline
The pipeline runs build steps, then checks the result. Depending on success, failure, or always, it runs the matching post actions.
Execution Sample
Jenkins
pipeline {
  agent any
  stages {
    stage('Build') {
      steps { sh 'exit 0' }
    }
  }
  post {
    success { echo 'Build succeeded' }
    failure { echo 'Build failed' }
    always { echo 'Cleanup' }
  }
}
This Jenkins pipeline runs a build stage that succeeds, then runs post steps for success and always.
Process Table
StepBuild ResultPost Condition CheckedPost Action ExecutedOutput
1RunningN/AN/ABuild stage starts
2Successsuccessecho 'Build succeeded'Build succeeded
3SuccessfailureNo action
4Successalwaysecho 'Cleanup'Cleanup
5EndN/AN/APipeline ends
💡 Build succeeded, so success and always post sections run; failure section skipped.
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
buildResultnullrunningsuccesssuccesssuccesssuccess
Key Moments - 2 Insights
Why does the failure post section not run when the build succeeds?
Because the post section 'failure' only runs if the build result is failure. As shown in execution_table row 3, the buildResult is 'success', so failure actions are skipped.
Does the always post section run regardless of build result?
Yes, the 'always' post section runs no matter what. In execution_table row 4, even after success, the always action runs.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the buildResult at Step 2?
Arunning
Bsuccess
Cfailure
Dnull
💡 Hint
Check the 'Build Result' column at Step 2 in the execution_table.
At which step does the failure post section get checked?
AStep 2
BStep 4
CStep 3
DStep 5
💡 Hint
Look at the 'Post Condition Checked' column in the execution_table.
If the build failed, which post sections would run?
Afailure and always
Bsuccess and always
Conly failure
Donly always
💡 Hint
Remember 'always' runs no matter what, and 'failure' runs only on failure.
Concept Snapshot
Jenkins post section runs after stages finish.
Use 'success' for actions on success.
Use 'failure' for actions on failure.
Use 'always' for actions that run every time.
Only matching post blocks run based on build result.
Full Transcript
This Jenkins pipeline example shows how the post section works. After the build stage runs and succeeds, Jenkins checks the build result. It runs the 'success' post block because the build succeeded. It skips the 'failure' block because the build did not fail. It always runs the 'always' block regardless of result. The execution table traces these steps clearly. Variables track the build result changing from null to running to success. Key moments clarify why failure block does not run on success and that always block runs every time. The quiz tests understanding of these steps. The snapshot summarizes the post section usage simply.

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