Post section (success, failure, always) in Jenkins - Time & Space Complexity
We want to understand how the time taken by a Jenkins pipeline changes when using the post section with success, failure, and always blocks.
Specifically, how does adding these blocks affect the overall execution time as the pipeline grows?
Analyze the time complexity of the following Jenkins pipeline snippet.
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
}
post {
success {
echo 'Success!'
}
failure {
echo 'Failure!'
}
always {
echo 'Always runs'
}
}
}
This pipeline runs a build stage and then runs different post blocks depending on the build result.
Look for repeated actions or loops in the post section.
- Primary operation: The post section runs exactly one of the success or failure blocks, plus the always block.
- How many times: Each post block runs once per pipeline execution, no loops or recursion.
The post section runs a fixed number of steps regardless of pipeline size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 3 (success/failure + always) |
| 100 | 3 |
| 1000 | 3 |
Pattern observation: The number of post steps does not grow with input size; it stays constant.
Time Complexity: O(1)
This means the post section runs a fixed number of steps no matter how big the pipeline or input is.
[X] Wrong: "The post section runs multiple times and grows with the number of stages or steps."
[OK] Correct: The post section runs only once after the entire pipeline finishes, so its execution time does not increase with pipeline size.
Understanding fixed versus growing execution parts in pipelines helps you design efficient CI/CD workflows and explain your reasoning clearly in interviews.
"What if the post section contained loops or calls to other jobs? How would that affect the time complexity?"
Practice
post section in a Jenkins pipeline?Solution
Step 1: Understand the role of the
Thepostsectionpostsection is designed to run steps after the main pipeline or stage finishes, regardless of success or failure.Step 2: Compare with other pipeline sections
Other sections likeenvironment,agent, andparametersserve different purposes, not for post-run steps.Final Answer:
To run steps after the main pipeline or stage finishes -> Option AQuick Check:
Post section = run after pipeline [OK]
- Confusing post with environment or agent sections
- Thinking post runs before pipeline starts
- Assuming post only runs on failure
post section?Solution
Step 1: Identify the correct post condition for success
Thesuccessblock runs only when the pipeline finishes successfully.Step 2: Check syntax correctness
post { success { ... } }is the correct syntax. Other options use wrong conditions or invalid keywords.Final Answer:
post { success { echo 'Build succeeded' } } -> Option BQuick Check:
Success block runs on success [OK]
- Using 'always' instead of 'success' for success-only steps
- Using invalid keywords like 'cleanup'
- Confusing 'failure' with 'success'
pipeline {
agent any
stages {
stage('Test') {
steps {
sh 'exit 1'
}
}
}
post {
success {
echo 'Build succeeded'
}
failure {
echo 'Build failed'
}
always {
echo 'Build finished'
}
}
}Solution
Step 1: Analyze the build result
The shell commandsh 'exit 1'causes the build to fail.Step 2: Determine which post blocks run on failure
Thefailureblock runs on failure, printing 'Build failed'. Thealwaysblock runs regardless, printing 'Build finished'. Thesuccessblock does not run.Final Answer:
Build failed Build finished -> Option AQuick Check:
Failure + always blocks run on failure [OK]
- Assuming success block runs on failure
- Ignoring the always block
- Thinking only failure block runs
post section:
post {
success {
echo 'Success!'
}
failure {
echo 'Failure!'
}
always {
echo 'Always runs'
}
cleanup {
echo 'Cleaning up'
}
}Solution
Step 1: Review valid post condition blocks
Valid blocks aresuccess,failure,always,unstable, andchanged. There is nocleanupblock.Step 2: Check syntax of echo commands
Theechocommands can be used directly in post blocks. The order of blocks does not matter.Final Answer:
The 'cleanup' block is invalid in the post section -> Option CQuick Check:
Only success, failure, always allowed [OK]
- Adding unsupported blocks like 'cleanup'
- Thinking block order matters
- Wrapping echo in steps inside post (not needed)
post section correctly implements this?Solution
Step 1: Identify notification condition
Notification should run only on failure, so it belongs in thefailureblock.Step 2: Identify archiving condition
Archiving logs should happen always, so it belongs in thealwaysblock.Step 3: Check syntax correctness
post { failure { mail to: 'team@example.com' } always { archiveArtifacts 'logs/**' } }correctly separates the two actions intofailureandalwaysblocks.post { failure { mail to: 'team@example.com' archiveArtifacts 'logs/**' } }puts both actions in the failure block, so archiving occurs only on failure.Final Answer:
post { failure { mail to: 'team@example.com' } always { archiveArtifacts 'logs/**' } } -> Option DQuick Check:
Failure for notify, always for archive [OK]
- Putting always steps inside failure block
- Sending notifications on success instead of failure
- Missing proper syntax for multiple steps
Ready to prove it?
Pass the test and this pattern moves unknown
