Bird
Raised Fist0
Jenkinsdevops~10 mins

Multiple SCM repositories in Jenkins - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Multiple SCM repositories
Start Jenkins Job
↓
Load SCM Configurations
↓
Checkout SCM Repo 1
↓
Checkout SCM Repo 2
↓
Run Build Steps
↓
Complete Job
Jenkins loads multiple SCM repository settings, checks out each repository in order, then runs build steps.
Execution Sample
Jenkins
pipeline {
  agent any
  stages {
    stage('Checkout') {
      steps {
        checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo1.git']]])
        checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo2.git']]])
      }
    }
  }
}
This Jenkins pipeline checks out two separate Git repositories sequentially.
Process Table
StepActionSCM Repo URLResultNotes
1Start Jenkins Job-Job startedInitial job trigger
2Load SCM Configurationshttps://repo1.git, https://repo2.gitConfigurations loadedBoth repo URLs read
3Checkout SCM Repo 1https://repo1.gitRepo 1 checked outWorkspace updated with repo1 files
4Checkout SCM Repo 2https://repo2.gitRepo 2 checked outWorkspace updated with repo2 files alongside repo1
5Run Build Steps-Build steps executedBuild uses files from both repos
6Complete Job-Job finished successfullyAll steps done
💡 Job ends after checking out both repositories and running build steps
Status Tracker
VariableStartAfter Step 3After Step 4Final
Workspace contentsemptyfiles from repo1files from repo1 + repo2files from repo1 + repo2
Key Moments - 2 Insights
Why do we see files from both repositories in the workspace after checkout?
Because Jenkins runs two separate checkout steps (see execution_table steps 3 and 4), it adds files from each repo into the workspace without removing the previous ones.
Does the second checkout overwrite the first repository's files?
No, the second checkout adds its files alongside the first repo's files, so both sets coexist in the workspace (execution_table step 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what happens at step 4?
ACheckout of the first repository
BCheckout of the second repository
CBuild steps execution
DJob completion
💡 Hint
Refer to the 'Action' and 'SCM Repo URL' columns in execution_table row 4
According to variable_tracker, what does the workspace contain after step 3?
AEmpty workspace
BFiles from repo2 only
CFiles from repo1 only
DFiles from both repo1 and repo2
💡 Hint
Check 'After Step 3' column for 'Workspace contents' in variable_tracker
If the second checkout was removed, how would the workspace contents change after the job?
AWorkspace would contain only repo1 files
BWorkspace would be empty
CWorkspace would contain only repo2 files
DWorkspace would contain files from both repos
💡 Hint
Look at variable_tracker and execution_table steps 3 and 4 to understand checkout effects
Concept Snapshot
Jenkins can checkout multiple SCM repositories by running multiple checkout steps.
Each checkout adds files to the workspace without removing previous ones.
Use separate checkout commands for each repo URL.
Build steps can then use files from all checked-out repos.
This allows combining code from different sources in one job.
Full Transcript
This visual execution shows how Jenkins handles multiple SCM repositories in one job. The job starts and loads configuration for two Git repositories. It then checks out the first repository, adding its files to the workspace. Next, it checks out the second repository, adding its files alongside the first. The workspace now contains files from both repositories. Build steps run using these combined files. Finally, the job completes successfully. The variable tracker confirms the workspace contents after each checkout. Key points include that each checkout adds files without overwriting previous ones, allowing multiple repos to coexist in the workspace.

Practice

(1/5)
1.

What is the main benefit of using multiple SCM repositories in a Jenkins job?

easy
A. It allows Jenkins to fetch code from several repositories in one build.
B. It speeds up the Jenkins server performance automatically.
C. It merges all repositories into a single repository permanently.
D. It restricts Jenkins to use only one branch per build.

Solution

  1. Step 1: Understand Jenkins SCM usage

    Jenkins uses SCM to get source code for building projects.
  2. Step 2: Identify multiple SCM benefit

    Multiple SCM lets Jenkins pull from many repositories in one job, useful for projects with dependencies.
  3. Final Answer:

    It allows Jenkins to fetch code from several repositories in one build. -> Option A
  4. Quick Check:

    Multiple SCM = fetch multiple repos [OK]
Hint: Multiple SCM means multiple code sources in one job [OK]
Common Mistakes:
  • Thinking it merges repos permanently
  • Assuming it improves server speed
  • Believing it limits branches
2.

Which Jenkins pipeline syntax correctly defines two SCM repositories using checkout steps?

<pre>1) checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo1.git']]]) checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo2.git']]]) 2) checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo1.git', url: 'https://repo2.git']]]) 3) checkout([$class: 'GitSCM', url: 'https://repo1.git']) checkout([$class: 'GitSCM', url: 'https://repo2.git']) 4) checkout([$class: 'GitSCM', userRemoteConfigs: ['https://repo1.git', 'https://repo2.git']])

easy
A. Option 1
B. Option 2
C. Option 3
D. Option 4

Solution

  1. Step 1: Check syntax for multiple SCM in Jenkins pipeline

    Each checkout step handles one SCM repo; multiple repos require multiple checkout calls.
  2. Step 2: Analyze options

    Option 1 uses two separate checkout calls with correct userRemoteConfigs. Option 2 tries to combine repos in one config incorrectly. Option 3 uses wrong key url directly. Option 4 uses wrong list format.
  3. Final Answer:

    Option 1 -> Option A
  4. Quick Check:

    Separate checkout per repo = Option 1 [OK]
Hint: Use separate checkout steps for each repo [OK]
Common Mistakes:
  • Combining multiple URLs in one userRemoteConfigs entry
  • Using 'url' key instead of userRemoteConfigs
  • Passing URLs as plain list without map
3.

Given this Jenkins pipeline snippet, what will be the result?

stage('Checkout') {
  steps {
    checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo1.git']]])
    checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo2.git']]])
  }
}

Choose the correct statement about the workspace after this stage runs.

medium
A. The workspace contains code from both repo1 and repo2 in separate folders.
B. The workspace contains only repo2 code, repo1 is overwritten.
C. The workspace contains merged files from repo1 and repo2 in the root folder.
D. The build will fail due to multiple checkout commands.

Solution

  1. Step 1: Understand default checkout behavior

    By default, Jenkins checks out each repo into the same workspace folder, overwriting previous content.
  2. Step 2: Analyze the effect of two checkout calls

    The second checkout replaces the first repo's files because both use the root workspace folder without specifying subdirectories.
  3. Final Answer:

    The workspace contains only repo2 code, repo1 is overwritten. -> Option B
  4. Quick Check:

    Multiple checkout without directories overwrites workspace [OK]
Hint: Without directories, last checkout overwrites workspace [OK]
Common Mistakes:
  • Assuming repos merge automatically
  • Thinking Jenkins creates subfolders by default
  • Believing multiple checkouts cause build failure
4.

In a Jenkins job configured with multiple SCM repositories, the build fails with this error: hudson.plugins.git.GitException: Command "git clone" failed. What is the most likely cause?

medium
A. The workspace directory is not cleaned before checkout.
B. The Jenkins server has no internet connection.
C. The Jenkinsfile syntax is invalid.
D. The userRemoteConfigs list is empty or missing URLs.

Solution

  1. Step 1: Understand the error context

    Git clone failure usually means the repository URL is invalid or missing.
  2. Step 2: Check multiple SCM config

    If userRemoteConfigs is empty or missing URLs, Jenkins cannot clone repos, causing this error.
  3. Final Answer:

    The userRemoteConfigs list is empty or missing URLs. -> Option D
  4. Quick Check:

    Missing repo URLs cause git clone failure [OK]
Hint: Check repo URLs in userRemoteConfigs first [OK]
Common Mistakes:
  • Blaming workspace cleanup for git clone errors
  • Assuming Jenkinsfile syntax causes git clone failure
  • Ignoring network issues as cause
5.

You want to configure a Jenkins pipeline to checkout two Git repositories into separate folders repo1 and repo2 inside the workspace. Which pipeline snippet correctly achieves this?

checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo1.git']], extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'repo1']]])
checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'https://repo2.git']], extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'repo2']]])
hard
A. This snippet merges both repos into the root workspace folder.
B. This snippet will fail because RelativeTargetDirectory is not supported.
C. This snippet correctly checks out both repos into separate folders.
D. This snippet only checks out the first repo; second is ignored.

Solution

  1. Step 1: Understand RelativeTargetDirectory extension

    This extension tells Jenkins to checkout the repo into a specified subfolder inside the workspace.
  2. Step 2: Analyze the snippet

    Each checkout uses RelativeTargetDirectory with different folder names, so repos go into separate folders without overwriting.
  3. Final Answer:

    This snippet correctly checks out both repos into separate folders. -> Option C
  4. Quick Check:

    RelativeTargetDirectory separates repos in workspace [OK]
Hint: Use RelativeTargetDirectory to separate repos in workspace [OK]
Common Mistakes:
  • Not using RelativeTargetDirectory causes overwriting
  • Assuming Jenkins merges repos automatically
  • Believing second checkout is ignored
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