📖 Scenario: You are setting up a Jenkins pipeline to build a simple project. You want to run specific actions after the build finishes, depending on whether it succeeded, failed, or always after the build.
🎯 Goal: Build a Jenkins pipeline script that uses the post section with success, failure, and always blocks to print messages based on the build result.
📋 What You'll Learn
Create a Jenkins pipeline with a pipeline block
Add a stage named Build that runs a simple shell command
Add a post section with success, failure, and always blocks
Print Build succeeded! on success
Print Build failed! on failure
Print This always runs. regardless of build result
💡 Why This Matters
🌍 Real World
In real projects, Jenkins pipelines automate building, testing, and deploying software. The post section helps run cleanup, notifications, or reports after builds.
💼 Career
Understanding Jenkins post sections is essential for DevOps roles to ensure proper build lifecycle management and notifications.
Progress0 / 4 steps
1
Create the basic Jenkins pipeline structure
Write a Jenkins pipeline script starting with pipeline { and add an agent any line inside it.
Jenkins
Hint
Start your Jenkinsfile with pipeline { and specify agent any to run on any available agent.
2
Add a Build stage with a shell command
Inside the pipeline block, add a stages section with one stage named Build. Inside this stage, add a steps block that runs the shell command echo Building... using sh.
Jenkins
Hint
Use stages to group your build steps. Inside the Build stage, use sh 'echo Building...' to run the shell command.
3
Add the post section with success, failure, and always blocks
Add a post section inside the pipeline block but outside stages. Inside post, add success, failure, and always blocks. In each block, add a steps section that runs echo commands printing exactly these messages: Build succeeded! for success, Build failed! for failure, and This always runs. for always.
Jenkins
Hint
The post section goes after stages. Use success, failure, and always blocks with steps inside to print messages.
4
Print the final pipeline script
Print the entire Jenkins pipeline script you wrote so far.
Jenkins
Hint
Use print to show the message pipeline script complete confirming your script is ready.
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
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.
Step 2: Compare with other pipeline sections
Other sections like environment, agent, and parameters serve different purposes, not for post-run steps.
Final Answer:
To run steps after the main pipeline or stage finishes -> Option A
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
Step 1: Identify the correct post condition for success
The success block 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 B
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?
The shell command sh 'exit 1' causes the build to fail.
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.
Final Answer:
Build failed
Build finished -> Option A
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:
C. The 'cleanup' block is invalid in the post section
D. The 'echo' commands must be inside 'steps' block
Solution
Step 1: Review valid post condition blocks
Valid blocks are success, failure, always, unstable, and changed. There is no cleanup block.
Step 2: Check syntax of echo commands
The echo commands 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 C
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
Step 1: Identify notification condition
Notification should run only on failure, so it belongs in the failure block.
Step 2: Identify archiving condition
Archiving logs should happen always, so it belongs in the always block.
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.
Final Answer:
post { failure { mail to: 'team@example.com' } always { archiveArtifacts 'logs/**' } } -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.