What if your pipeline could fix itself when things go wrong, without you lifting a finger?
Why Options directive (timeout, retry) in Jenkins? - Purpose & Use Cases
Imagine you run a Jenkins pipeline that builds your project and runs tests. Sometimes, the build hangs or a test fails due to temporary issues. Without any control, you wait forever or have to restart the whole process manually.
Manually watching the build wastes time and attention. If a step hangs, you lose hours waiting. If a test fails once, you must rerun the entire pipeline yourself. This is slow, frustrating, and error-prone.
The Options directive in Jenkins lets you set automatic rules like timeout to stop hanging steps and retry to rerun failed steps a few times. This saves you from manual restarts and endless waiting.
stage('Build') { steps { // run build and wait forever } } // manually restart if fails or hangs
options {
timeout(time: 10, unit: 'MINUTES')
retry(3)
}
stage('Build') {
steps {
// run build with automatic timeout and retries
}
}You can trust your pipeline to handle delays and temporary failures automatically, freeing you to focus on real problems.
In a team project, a flaky network causes occasional test failures. Using retry lets Jenkins rerun tests up to 3 times, reducing false alarms and saving developer time.
Manual builds can hang or fail, wasting time.
Options directive adds automatic timeout and retry controls.
This makes pipelines more reliable and less hands-on.
Practice
timeout option in a Jenkins pipeline?Solution
Step 1: Understand the role of timeout
Thetimeoutoption is used to limit how long a build or step can run.Step 2: Identify the effect of timeout
If the build runs longer than the set time, Jenkins stops it to save resources.Final Answer:
To stop a build if it runs longer than a specified time -> Option AQuick Check:
Timeout = stop long builds [OK]
- Confusing timeout with retry
- Thinking timeout schedules builds
- Assuming timeout increases priority
Solution
Step 1: Recall Jenkins options syntax
The correct syntax usesretry(3)inside theoptionsblock without extra braces.Step 2: Identify the valid option
options { retry(3) } matches the correct syntax exactly:options { retry(3) }.Final Answer:
options { retry(3) } -> Option DQuick Check:
Retry syntax = retry(3) inside options [OK]
- Adding extra braces after retry(3)
- Using retry without parentheses
- Placing retry outside options block
options {
timeout(time: 5, unit: 'MINUTES')
retry(2)
}
stage('Test') {
steps {
script {
def count = 0
retry(2) {
count++
if (count < 3) {
error('Fail')
}
}
echo "Count is ${count}"
}
}
}What will be the output of the
echo command?Solution
Step 1: Understand retry behavior in script
The innerretry(2)block retries the enclosed code up to 2 times on failure.Step 2: Trace the count increments and errors
First run: count=1, error thrown (count<3). Retry 1: count=2, error thrown. Retry 2: count=3, no error, exits retry.Step 3: Determine echo output
After retries, count is 3, soecho "Count is 3"runs.Final Answer:
Count is 3 -> Option CQuick Check:
Retry runs until count=3, then echo prints count [OK]
- Assuming retry runs only once
- Thinking count resets on retry
- Ignoring retry inside script block
options {
timeout(10)
retry(3)
}But the build fails with a syntax error. What is the problem?
Solution
Step 1: Check timeout syntax requirements
Thetimeoutoption requires named parameters:timeandunit.Step 2: Identify missing parameters
Usingtimeout(10)alone is invalid; it must betimeout(time: 10, unit: 'MINUTES').Final Answer:
timeout requires both time and unit parameters -> Option AQuick Check:
Timeout needs time and unit named params [OK]
- Passing only a number to timeout
- Thinking retry needs a block
- Confusing timeout value types
Solution
Step 1: Set timeout correctly
Timeout must use named parameters:time: 2, unit: 'MINUTES'.Step 2: Add retry correctly
Retry is a separate option inside theoptionsblock:retry(2).Step 3: Validate options block structure
options { timeout(time: 2, unit: 'MINUTES') retry(2) } correctly lists both options without nesting or syntax errors.Final Answer:
options { timeout(time: 2, unit: 'MINUTES') retry(2) } -> Option BQuick Check:
Timeout and retry as separate options inside options block [OK]
- Nesting retry inside timeout block
- Using timeout without named params
- Wrong parameter order or types
Ready to prove it?
Pass the test and this pattern moves unknown
