Bird
Raised Fist0
Jenkinsdevops~20 mins

Branch-specific pipeline behavior in Jenkins - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Branch Mastery in Jenkins Pipelines
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of branch-specific Jenkins pipeline snippet
Given this Jenkins pipeline snippet, what will be printed when the branch is 'feature/new-ui'?
Jenkins
pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        script {
          if (env.BRANCH_NAME == 'main') {
            echo 'Building main branch'
          } else {
            echo "Building branch: ${env.BRANCH_NAME}"
          }
        }
      }
    }
  }
}
ABuilding main branch
BNo output
CError: BRANCH_NAME not defined
DBuilding branch: feature/new-ui
Attempts:
2 left
💡 Hint
Check the condition comparing env.BRANCH_NAME to 'main'.
❓ Configuration
intermediate
2:00remaining
Correct Jenkinsfile syntax for branch-specific stage
Which Jenkinsfile snippet correctly runs the 'Deploy' stage only on the 'release' branch?
A
stage('Deploy') {
  when {
    branch 'release'
  }
  steps {
    echo 'Deploying release branch'
  }
}
B
stage('Deploy') {
  when {
    environment name: 'BRANCH_NAME', value: 'release'
  }
  steps {
    echo 'Deploying release branch'
  }
}
C
stage('Deploy') {
  if (env.BRANCH_NAME == 'release') {
    steps {
      echo 'Deploying release branch'
    }
  }
}
D
stage('Deploy') {
  when {
    branch == 'release'
  }
  steps {
    echo 'Deploying release branch'
  }
}
Attempts:
2 left
💡 Hint
Use the 'when' directive with 'branch' condition.
❓ Troubleshoot
advanced
2:00remaining
Why does the Jenkins pipeline stage run on all branches despite 'when' condition?
A Jenkins pipeline has this stage: stage('Test') { when { branch 'develop' } steps { echo 'Running tests' } } But the stage runs on 'feature/login' branch too. What is the most likely cause?
AThe pipeline is running in a multibranch job but BRANCH_NAME is not set properly
BThe 'branch' condition is case-sensitive and branch name is 'Develop' with uppercase D
CThe 'when' directive is ignored if placed inside 'steps' block
DThe 'when' condition requires 'expression' block to work
Attempts:
2 left
💡 Hint
Check environment variables in multibranch pipelines.
🔀 Workflow
advanced
2:00remaining
Order of execution in branch-specific Jenkins pipeline
Given this Jenkins pipeline snippet, what is the order of printed messages when running on branch 'hotfix'?
Jenkins
pipeline {
  agent any
  stages {
    stage('Init') {
      steps {
        echo 'Init stage'
      }
    }
    stage('Build') {
      when {
        branch 'main'
      }
      steps {
        echo 'Build stage'
      }
    }
    stage('Test') {
      when {
        not {
          branch 'main'
        }
      }
      steps {
        echo 'Test stage'
      }
    }
  }
}
A1,2,3
B3,1
C1,3
D2,3
Attempts:
2 left
💡 Hint
Check which stages run on 'hotfix' branch.
✅ Best Practice
expert
3:00remaining
Best practice for managing branch-specific Jenkins pipeline logic
Which approach is best to maintain complex branch-specific logic in Jenkins pipelines for multiple branches with different build steps?
ACreate separate Jenkinsfiles per branch and configure jobs to use the correct file
BUse a shared library with functions that handle branch-specific logic called from a simple Jenkinsfile
CUse multiple 'when' conditions inside a single Jenkinsfile with complex nested logic
DUse environment variables to disable stages manually per branch
Attempts:
2 left
💡 Hint
Think about maintainability and code reuse.

Practice

(1/5)
1.

Which Jenkins pipeline syntax runs a stage only on the main branch?

easy
A. branch == 'main' { runStage() }
B. if (branch == 'main')
C. onlyIf branch == 'main'
D. when { branch 'main' }

Solution

  1. Step 1: Understand Jenkins branch condition syntax

    Jenkins uses when { branch 'branchName' } to run stages on specific branches.
  2. Step 2: Match syntax to run on main branch

    The correct syntax is when { branch 'main' } to target the main branch.
  3. Final Answer:

    when { branch 'main' } -> Option D
  4. Quick Check:

    Branch condition = when { branch 'main' } [OK]
Hint: Use 'when { branch "branchName" }' for branch-specific stages [OK]
Common Mistakes:
  • Using if statements instead of 'when' block
  • Incorrect syntax like 'onlyIf' or inline conditions
  • Confusing branch name quotes or missing quotes
2.

Which snippet correctly uses Jenkins declarative pipeline syntax to run a stage only on branches dev or feature/*?

stage('Test') {
  when {
    ???
  }
  steps {
    echo 'Running tests'
  }
}
easy
A. anyOf { branch 'dev'; branch 'feature/*' }
B. branch 'dev' && branch 'feature/*'
C. allOf { branch 'dev'; branch 'feature/*' }
D. branch 'dev' || branch 'feature/*'

Solution

  1. Step 1: Identify correct syntax for multiple branch conditions

    Jenkins uses anyOf { branch 'name'; branch 'pattern' } to run if any branch matches.
  2. Step 2: Choose syntax matching either 'dev' or 'feature/*'

    Using anyOf { branch 'dev'; branch 'feature/*' } runs the stage on either branch.
  3. Final Answer:

    anyOf { branch 'dev'; branch 'feature/*' } -> Option A
  4. Quick Check:

    Multiple branches = anyOf with branch conditions [OK]
Hint: Use anyOf { branch 'x'; branch 'y' } for multiple branches [OK]
Common Mistakes:
  • Using logical operators like || or && directly inside when
  • Using allOf which requires all conditions true
  • Incorrect syntax without braces or semicolons
3.

Given this Jenkins pipeline snippet, what will be the output if the branch is feature/login?

pipeline {
  agent any
  stages {
    stage('Build') {
      when { branch 'main' }
      steps { echo 'Building main branch' }
    }
    stage('Test') {
      when { branch 'feature/*' }
      steps { echo 'Testing feature branch' }
    }
  }
}
medium
A. Testing feature branch
B. Building main branch
C. Building main branch\nTesting feature branch
D. No output

Solution

  1. Step 1: Check branch conditions for each stage

    'Build' runs only on 'main' branch; 'Test' runs on branches matching 'feature/*'.
  2. Step 2: Match current branch 'feature/login'

    'feature/login' matches 'feature/*', so only 'Test' stage runs and prints 'Testing feature branch'.
  3. Final Answer:

    Testing feature branch -> Option A
  4. Quick Check:

    Branch 'feature/login' matches 'feature/*' only [OK]
Hint: Match branch patterns carefully to predict stage execution [OK]
Common Mistakes:
  • Assuming 'main' stage runs on all branches
  • Ignoring wildcard pattern matching
  • Expecting both stages to run always
4.

Identify the error in this Jenkins pipeline snippet that tries to run a stage only on the release branch:

stage('Deploy') {
  when {
    branch release
  }
  steps {
    echo 'Deploying release branch'
  }
}
medium
A. Steps block should be outside the stage
B. Incorrect stage name 'Deploy'
C. Missing quotes around branch name in when condition
D. Branch condition should be inside steps

Solution

  1. Step 1: Review syntax for branch condition in when block

    The branch name must be a string inside quotes: branch 'release'.
  2. Step 2: Identify missing quotes causing syntax error

    Here, branch release lacks quotes, causing a syntax error.
  3. Final Answer:

    Missing quotes around branch name in when condition -> Option C
  4. Quick Check:

    Branch names need quotes in when { branch 'name' } [OK]
Hint: Always quote branch names in when { branch 'name' } [OK]
Common Mistakes:
  • Omitting quotes around branch names
  • Placing steps outside stage block
  • Misplacing branch condition inside steps
5.

You want a Jenkins pipeline stage to run on all branches except main and develop. Which when condition correctly implements this?

hard
A. allOf { not branch 'main'; not branch 'develop' }
B. not { anyOf { branch 'main'; branch 'develop' } }
C. anyOf { not branch 'main'; not branch 'develop' }
D. branch != 'main' && branch != 'develop'

Solution

  1. Step 1: Understand negation of multiple branches

    To exclude branches, wrap the branches in anyOf and negate with not.
  2. Step 2: Apply correct syntax for excluding 'main' and 'develop'

    not { anyOf { branch 'main'; branch 'develop' } } runs on all branches except these two.
  3. Final Answer:

    not { anyOf { branch 'main'; branch 'develop' } } -> Option B
  4. Quick Check:

    Exclude branches = not { anyOf { ... } } [OK]
Hint: Use not { anyOf { branch 'x'; branch 'y' } } to exclude branches [OK]
Common Mistakes:
  • Using allOf with negations incorrectly
  • Using logical operators like && directly
  • Misplacing not inside anyOf instead of outside
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