Bird
Raised Fist0
Jenkinsdevops~20 mins

Source code management setup in Jenkins - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Source Code Management Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Jenkins Git SCM Plugin: What is the output?

You configured a Jenkins job with Git SCM plugin to clone a repository. The repository URL is correct, but the branch name is set to feature-xyz which does not exist in the remote repo.

What will Jenkins show in the console output when it tries to fetch this branch?

ACloning repository... Branch feature-xyz checked out successfully.
BBuild succeeded without fetching any branch.
CERROR: Could not find remote branch feature-xyz to clone.
DWarning: Branch feature-xyz is deprecated, using master instead.
Attempts:
2 left
💡 Hint

Think about what happens if Jenkins tries to fetch a branch that does not exist.

❓ Configuration
intermediate
2:00remaining
Jenkins Pipeline SCM Configuration Syntax

Which Jenkins Pipeline syntax snippet correctly checks out a Git repository from https://github.com/example/repo.git on branch develop?

Acheckout([$class: 'GitSCM', branches: [[name: 'develop']], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]])
Bgit url: 'https://github.com/example/repo.git', branch: 'develop'
Ccheckout scm: git('https://github.com/example/repo.git', 'develop')
DgitCheckout(url: 'https://github.com/example/repo.git', branch: 'develop')
Attempts:
2 left
💡 Hint

Remember the Jenkins Pipeline checkout step syntax for GitSCM.

❓ Troubleshoot
advanced
2:00remaining
Jenkins Git Credentials Failure Diagnosis

A Jenkins job configured with Git SCM fails with the error: Authentication failed for https://github.com/example/repo.git. The credentials are set as username/password in Jenkins credentials store.

Which is the most likely cause?

AThe Git plugin version is outdated and incompatible with GitHub.
BThe repository URL is incorrect and does not match the credentials domain.
CThe Jenkins server has no internet access.
DThe credentials are not linked to the Git SCM configuration in the job.
Attempts:
2 left
💡 Hint

Check if the credentials are properly selected in the job configuration.

🔀 Workflow
advanced
2:00remaining
Jenkins Multibranch Pipeline SCM Behavior

In a Jenkins Multibranch Pipeline job, what happens when a new branch is pushed to the remote Git repository?

AJenkins ignores new branches until manually added in the job configuration.
BJenkins automatically detects the new branch and creates a new job for it.
CJenkins deletes all existing branches and only builds the new one.
DJenkins triggers a build on the master branch only.
Attempts:
2 left
💡 Hint

Think about how Multibranch Pipeline jobs manage branches automatically.

✅ Best Practice
expert
2:00remaining
Best Practice for Jenkins SCM Polling Frequency

What is the best practice for setting SCM polling frequency in Jenkins to balance build responsiveness and server load?

ASet polling interval to every 5 minutes to catch changes quickly without overloading the server.
BSet polling interval to every 30 seconds for immediate build triggers.
CSet polling interval to once a day to minimize server load.
DDisable polling and rely only on manual build triggers.
Attempts:
2 left
💡 Hint

Consider the trade-off between build speed and resource usage.

Practice

(1/5)
1. What is the main purpose of setting up source code management (SCM) in Jenkins?
easy
A. To automatically fetch the latest code from a repository
B. To manually upload code files to Jenkins
C. To create user accounts for Jenkins
D. To monitor server hardware status

Solution

  1. Step 1: Understand SCM role in Jenkins

    SCM connects Jenkins to your code repository to get the latest code automatically.
  2. Step 2: Compare options

    Only To automatically fetch the latest code from a repository describes automatic fetching of code, which is the main purpose of SCM setup.
  3. Final Answer:

    To automatically fetch the latest code from a repository -> Option A
  4. Quick Check:

    SCM = automatic code fetch [OK]
Hint: SCM means Jenkins pulls code automatically [OK]
Common Mistakes:
  • Thinking SCM uploads code manually
  • Confusing SCM with user management
  • Assuming SCM monitors hardware
2. Which Jenkins pipeline syntax correctly checks out code from a Git repository URL https://github.com/example/repo.git on branch main?
easy
A. git url: 'https://github.com/example/repo.git' branch: 'main'
B. checkout([$class: 'GitSCM', branches: [[name: 'main']], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]])
C. checkout scm: 'https://github.com/example/repo.git', branch: 'main'
D. gitCheckout('https://github.com/example/repo.git', 'main')

Solution

  1. Step 1: Recall Jenkins pipeline checkout syntax

    The correct syntax uses checkout with a map specifying $class: 'GitSCM', branches, and userRemoteConfigs.
  2. Step 2: Validate options

    checkout([$class: 'GitSCM', branches: [[name: 'main']], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]]) matches the correct syntax. Options B, C, and D are incorrect Jenkins pipeline syntax.
  3. Final Answer:

    checkout([$class: 'GitSCM', branches: [[name: 'main']], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]]) -> Option B
  4. Quick Check:

    Use checkout with GitSCM map [OK]
Hint: Use checkout with $class: 'GitSCM' for Git repos [OK]
Common Mistakes:
  • Using incorrect method names like gitCheckout
  • Missing $class: 'GitSCM' in checkout
  • Wrong parameter names or structure
3. Given this Jenkins pipeline snippet, what will be the output if the repository URL is invalid?
pipeline {
  agent any
  stages {
    stage('Checkout') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: 'main']], userRemoteConfigs: [[url: 'https://invalid-url/repo.git']]])
      }
    }
  }
}
medium
A. The pipeline will retry checkout indefinitely
B. The pipeline will succeed but skip checkout
C. The pipeline will fail with a checkout error
D. The pipeline will ignore the invalid URL and continue

Solution

  1. Step 1: Understand checkout behavior with invalid URL

    If the Git URL is invalid, Jenkins cannot fetch code and throws an error causing the pipeline to fail.
  2. Step 2: Analyze options

    Only The pipeline will fail with a checkout error correctly states the pipeline fails with a checkout error. Others describe incorrect behaviors.
  3. Final Answer:

    The pipeline will fail with a checkout error -> Option C
  4. Quick Check:

    Invalid URL causes checkout failure [OK]
Hint: Invalid repo URL causes pipeline failure [OK]
Common Mistakes:
  • Assuming pipeline skips checkout silently
  • Thinking Jenkins retries forever
  • Believing pipeline ignores errors
4. You wrote this Jenkins pipeline snippet to checkout code but it fails with a syntax error:
checkout([$class: 'GitSCM', branches: [name: 'main'], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]])
What is the error and how to fix it?
medium
A. Missing quotes around $class; fix to "$class: 'GitSCM'"
B. Wrong URL format; fix to 'git@github.com:example/repo.git'
C. Incorrect method name; fix to gitCheckout(...)
D. Missing double brackets around branches list; fix to branches: [[name: 'main']]

Solution

  1. Step 1: Identify syntax error in branches parameter

    The branches parameter expects a list of maps, so it must be double bracketed: [[name: 'main']].
  2. Step 2: Correct the branches syntax

    Change branches: [name: 'main'] to branches: [[name: 'main']] to fix the syntax error.
  3. Final Answer:

    Missing double brackets around branches list; fix to branches: [[name: 'main']] -> Option D
  4. Quick Check:

    Branches list needs double brackets [OK]
Hint: Branches must be a list of maps with double brackets [OK]
Common Mistakes:
  • Using single brackets for branches list
  • Changing URL format unnecessarily
  • Misquoting $class key
5. You want Jenkins to checkout code from a Git repository and only build when the develop branch changes. Which setup correctly achieves this in a declarative pipeline?
hard
A.
pipeline {
  agent any
  triggers {
    pollSCM('H/5 * * * *')
  }
  stages {
    stage('Checkout') {
      steps {
        git branch: 'develop', url: 'https://github.com/example/repo.git'
      }
    }
  }
}
B.
pipeline {
  agent any
  triggers {
    pollSCM('H/5 * * * *')
  }
  stages {
    stage('Checkout') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: 'main']], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]])
      }
    }
  }
}
C.
pipeline {
  agent any
  triggers {
    cron('H/5 * * * *')
  }
  stages {
    stage('Checkout') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: 'develop']], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]])
      }
    }
  }
}
D. >erp/<} } } } )]]]'tig.oper/elpmaxe/moc.buhtig//:sptth' :lru[[ :sgifnoCetomeRresu ,]]'niam' :eman[[ :sehcnarb ,'MCStiG' :ssalc$[(tuokcehc { spets { )'tuokcehC'(egats { segats } )'* * * * 5/H'(MCSllop { sreggirt yna tnega { enilepip>erp<

Solution

  1. Step 1: Understand trigger and checkout requirements

    To build only when the develop branch changes, use pollSCM trigger and checkout the develop branch.
  2. Step 2: Compare checkout methods

    pipeline {
      agent any
      triggers {
        pollSCM('H/5 * * * *')
      }
      stages {
        stage('Checkout') {
          steps {
            git branch: 'develop', url: 'https://github.com/example/repo.git'
          }
        }
      }
    }
    uses the simpler git step with branch and URL, which works well with pollSCM trigger to watch develop branch changes.
  3. Step 3: Identify why others are incorrect

    Options A and C use checkout with GitSCM but C uses cron trigger (not SCM polling).
    pipeline {
      agent any
      triggers {
        pollSCM('H/5 * * * *')
      }
      stages {
        stage('Checkout') {
          steps {
            checkout([$class: 'GitSCM', branches: [[name: 'main']], userRemoteConfigs: [[url: 'https://github.com/example/repo.git']]])
          }
        }
      }
    }
    checks out main branch, not develop.
  4. Final Answer:

    Use pollSCM trigger with git step for develop branch checkout -> Option A
  5. Quick Check:

    pollSCM + git step + develop branch = correct setup [OK]
Hint: Use pollSCM trigger and git step with branch name [OK]
Common Mistakes:
  • Using cron instead of pollSCM for SCM changes
  • Checking out wrong branch
  • Using complex checkout syntax unnecessarily
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