What is the purpose of the when directive in a Jenkins pipeline stage?
The when directive controls whether a stage runs or is skipped based on specified conditions, helping to make pipelines more flexible and efficient.
Click to reveal answer
beginner
Name two common conditions you can use inside the when directive.
You can use conditions like branch to run a stage only on specific branches, and environment to run a stage only if an environment variable matches a value.
Click to reveal answer
intermediate
How does the when directive improve pipeline efficiency?
By skipping stages that are not needed based on conditions, it saves time and resources, similar to deciding not to cook a meal if you already have leftovers.
Click to reveal answer
beginner
What happens if the when condition in a stage evaluates to false?
The stage is skipped and does not run, but the pipeline continues with the next stages.
Click to reveal answer
beginner
Write a simple example of a Jenkins stage that runs only on the 'main' branch using the when directive.
stage('Deploy') {
when {
branch 'main'
}
steps {
echo 'Deploying to production'
}
}
Click to reveal answer
What does the when directive do in a Jenkins pipeline stage?
AControls if the stage runs based on conditions
BDefines the steps inside a stage
CSets environment variables
DTriggers another pipeline
✗ Incorrect
The when directive controls whether a stage runs or is skipped based on conditions.
Which condition would you use to run a stage only on a specific branch?
Aenvironment
Bchangeset
Cexpression
Dbranch
✗ Incorrect
The branch condition runs the stage only on specified branches.
If a when condition is false, what happens to the stage?
APipeline stops
BIt runs anyway
CIt skips the stage
DPipeline restarts
✗ Incorrect
The stage is skipped but the pipeline continues.
Which of these is NOT a valid when condition in Jenkins?
Abranch
Btime
Cenvironment
Dexpression
✗ Incorrect
There is no built-in time condition in Jenkins when directive.
How can you combine multiple conditions in a when directive?
AUsing <code>allOf</code> or <code>anyOf</code>
BUsing <code>and</code> or <code>or</code> keywords
CUsing <code>if</code> statements
DYou cannot combine conditions
✗ Incorrect
Jenkins supports combining conditions with allOf (AND) and anyOf (OR).
Explain how the when directive helps control the flow of a Jenkins pipeline.
Think about how you decide to do or skip tasks based on conditions in daily life.
You got /4 concepts.
Describe how you would use multiple conditions inside a when directive to run a stage only on the 'main' branch and when an environment variable is set to 'production'.
Combine conditions using <code>allOf</code> to require both to be true.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of the when directive in a Jenkins pipeline stage?
easy
A. To set the timeout for a stage execution
B. To define environment variables for a stage
C. To specify the agent where the stage runs
D. To control whether a stage runs based on specified conditions
Solution
Step 1: Understand the role of when directive
The when directive is used to decide if a stage should run or be skipped based on conditions.
Step 2: Compare with other stage directives
Other directives like environment, agent, and timeout serve different purposes unrelated to conditional execution.
Final Answer:
To control whether a stage runs based on specified conditions -> Option D
Quick Check:
when controls stage execution [OK]
Hint: Remember: when decides if stage runs or skips [OK]
Common Mistakes:
Confusing when with environment
Thinking when sets agent or timeout
Assuming when always runs the stage
2. Which of the following is the correct syntax to run a stage only on the 'main' branch using the when directive?
easy
A.
when {
branch 'main'
}
B.
when {
branch == 'main'
}
C.
when {
if (branch == 'main')
}
D.
when {
branch: 'main'
}
Solution
Step 1: Recall correct when syntax for branch condition
The correct syntax uses branch 'branchName' inside when block without operators or colons.
Step 2: Identify syntax errors in other options
Options B and C use invalid operators or expressions; D uses colon which is incorrect in this context.
Final Answer:
when {
branch 'main'
} -> Option A
Quick Check:
Use branch 'name' syntax [OK]
Hint: Use branch 'name' without operators in when [OK]
Common Mistakes:
Using comparison operators inside when
Adding colons or equal signs incorrectly
Writing if statements inside when
3. Given the following Jenkins pipeline snippet, what will happen if the branch is 'feature'?
stage('Deploy') {
when {
branch 'main'
}
steps {
echo 'Deploying to production'
}
}
medium
A. The stage will run and print 'Deploying to production'
B. The stage will be skipped and nothing will print
C. The pipeline will fail with a syntax error
D. The stage will run but print nothing
Solution
Step 1: Understand the when condition
The stage runs only if the branch is 'main'. Since the branch is 'feature', the condition is false.
Step 2: Determine stage behavior on false condition
When when condition is false, Jenkins skips the stage and does not execute steps.
Final Answer:
The stage will be skipped and nothing will print -> Option B
Quick Check:
Branch mismatch skips stage [OK]
Hint: If branch doesn't match, stage is skipped silently [OK]
Common Mistakes:
Assuming stage runs regardless of branch
Expecting syntax error for valid when
Thinking stage runs but steps don't print
4. Identify the error in this Jenkins pipeline stage that uses when:
C. Using '==' operator inside when is invalid syntax
D. The steps block should be inside when
Solution
Step 1: Check when syntax for branch condition
The when directive expects branch 'name' without operators like '=='.
Step 2: Validate other parts of the stage
Missing agent is allowed if inherited; steps must be outside when; stage name is valid.
Final Answer:
Using '==' operator inside when is invalid syntax -> Option C
Quick Check:
No operators in when branch condition [OK]
Hint: No operators like '==' inside when branch check [OK]
Common Mistakes:
Using comparison operators inside when
Placing steps inside when
Assuming stage name restrictions
5. You want a Jenkins stage to run only when the branch is 'release' and an environment variable DEPLOY is set to 'true'. Which when directive correctly implements this?