Bird
Raised Fist0
Jenkinsdevops~10 mins

Copying artifacts between jobs in Jenkins - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Copying artifacts between jobs
Job A builds and archives artifact
↓
Artifact stored in Jenkins
↓
Job B triggers or waits
↓
Job B copies artifact from Job A
↓
Job B uses artifact for its build
This flow shows how one Jenkins job creates and stores an artifact, and another job copies that artifact to use it.
Execution Sample
Jenkins
pipeline {
  agent any
  stages {
    stage('Copy Artifact') {
      steps {
        copyArtifacts(projectName: 'JobA', filter: 'output/*.jar')
      }
    }
  }
}
This Jenkins pipeline (Job B) copies artifacts from Job A. Job A archives them using `archiveArtifacts artifacts: 'output/*.jar'`.
Process Table
StepActionJobArtifact StateResult
1Build completes and archives artifactJob AArtifact 'app.jar' savedArtifact stored in Jenkins
2Job B starts and calls copyArtifactsJob BNo artifact yetStarts copying
3copyArtifacts fetches 'app.jar' from Job AJob BArtifact copied locallyArtifact ready for use
4Job B uses artifact in buildJob BArtifact presentBuild proceeds with artifact
5Job B finishesJob BArtifact usedJob B completes successfully
💡 Job B finishes after copying and using artifact from Job A
Status Tracker
VariableStartAfter Step 1After Step 3Final
artifact_locationnonestored in Jenkins archivecopied to Job B workspacepresent in Job B workspace
Key Moments - 2 Insights
Why does Job B need to specify the projectName in copyArtifacts?
Because copyArtifacts needs to know which job's artifacts to copy. This is shown in execution_table step 3 where Job B fetches artifacts from Job A.
What happens if Job A has not archived any artifacts?
copyArtifacts will fail to find artifacts to copy, so Job B cannot proceed with the artifact-dependent build. This is implied by the artifact state in step 2 and 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step does Job B have the artifact copied locally?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Check the 'Artifact State' column in execution_table row for Step 3.
According to variable_tracker, what is the state of artifact_location after Step 1?
Anone
Bstored in Jenkins archive
Ccopied to Job B workspace
Dpresent in Job B workspace
💡 Hint
Look at the 'After Step 1' column for artifact_location in variable_tracker.
If Job A does not archive artifacts, what will happen in Job B's copyArtifacts step?
AcopyArtifacts will fail to find artifacts
BcopyArtifacts will succeed with empty files
CJob B will skip copying and continue
DJob B will archive artifacts instead
💡 Hint
Refer to key_moments explanation about missing artifacts and execution_table steps 2 and 3.
Concept Snapshot
Jenkins jobs can share files by archiving artifacts in one job and copying them in another.
Use archiveArtifacts in the producing job.
Use copyArtifacts with projectName and filter in the consuming job.
Artifacts are stored centrally and copied on demand.
This enables multi-job pipelines sharing build outputs.
Full Transcript
In Jenkins, one job can save files called artifacts using archiveArtifacts. Another job can copy these files using copyArtifacts by specifying the job name and file pattern. The flow starts with Job A building and archiving the artifact. Then Job B runs and copies the artifact from Job A's archive. This allows Job B to use the artifact in its build. If Job A does not archive artifacts, Job B's copyArtifacts step will fail. Tracking the artifact location shows it moves from Jenkins storage to Job B's workspace. This method helps share build outputs between jobs in Jenkins pipelines.

Practice

(1/5)
1. What is the main purpose of using the copyArtifacts step in Jenkins?
easy
A. To compile source code in a Jenkins job
B. To delete artifacts after a build completes
C. To trigger a new Jenkins job automatically
D. To copy files from one Jenkins job to another

Solution

  1. Step 1: Understand the copyArtifacts step

    The copyArtifacts step is designed to transfer files (artifacts) from one Jenkins job to another.
  2. Step 2: Identify the main use case

    This step helps share build outputs between jobs without rebuilding, enabling reuse of files.
  3. Final Answer:

    To copy files from one Jenkins job to another -> Option D
  4. Quick Check:

    copyArtifacts = copy files between jobs [OK]
Hint: copyArtifacts copies files between jobs, not triggers or deletes [OK]
Common Mistakes:
  • Confusing copyArtifacts with job triggers
  • Thinking it deletes files instead of copying
  • Assuming it compiles code
2. Which of the following is the correct syntax to copy artifacts from a job named BuildJob in a Jenkins pipeline script?
easy
A. copyArtifacts(projectName: 'BuildJob')
B. copyArtifacts('BuildJob')
C. copyArtifacts job: 'BuildJob'
D. copyArtifacts from: 'BuildJob'

Solution

  1. Step 1: Recall the correct syntax for copyArtifacts

    The correct syntax uses named parameters, with projectName specifying the source job.
  2. Step 2: Match the syntax to the options

    copyArtifacts(projectName: 'BuildJob') uses copyArtifacts(projectName: 'BuildJob'), which is the correct form in pipeline scripts.
  3. Final Answer:

    copyArtifacts(projectName: 'BuildJob') -> Option A
  4. Quick Check:

    Use named parameter projectName in copyArtifacts [OK]
Hint: Use named parameter projectName: 'JobName' in copyArtifacts [OK]
Common Mistakes:
  • Using positional arguments instead of named parameters
  • Using incorrect keywords like job or from
  • Missing parentheses or quotes
3. Given the following Jenkins pipeline snippet, what files will be copied?
copyArtifacts(projectName: 'BuildJob', filter: '**/*.jar')
medium
A. Only files with .jar extension from BuildJob artifacts
B. All files from BuildJob workspace
C. Only files named exactly 'filter' from BuildJob
D. No files will be copied due to syntax error

Solution

  1. Step 1: Understand the filter parameter

    The filter parameter uses Ant-style patterns to select files. '**/*.jar' means all .jar files in any folder.
  2. Step 2: Determine which files are copied

    Only artifact files matching the pattern '*.jar' from the 'BuildJob' are copied, not all files.
  3. Final Answer:

    Only files with .jar extension from BuildJob artifacts -> Option A
  4. Quick Check:

    filter '**/*.jar' copies only .jar files [OK]
Hint: filter '**/*.ext' copies only files with that extension [OK]
Common Mistakes:
  • Assuming all files copy without filter
  • Thinking filter is a filename, not a pattern
  • Believing syntax causes error here
4. You wrote this snippet to copy artifacts but it fails:
copyArtifacts(projectName: BuildJob)
What is the likely cause of the failure?
medium
A. copyArtifacts does not accept projectName parameter
B. Missing quotes around the job name 'BuildJob'
C. The job BuildJob does not exist
D. copyArtifacts requires a filter parameter

Solution

  1. Step 1: Check syntax for projectName parameter

    In pipeline scripts, string values must be quoted. Missing quotes cause syntax errors.
  2. Step 2: Identify the error cause

    Since BuildJob is unquoted, Jenkins treats it as a variable, causing failure if undefined.
  3. Final Answer:

    Missing quotes around the job name 'BuildJob' -> Option B
  4. Quick Check:

    Job names must be quoted strings [OK]
Hint: Always quote job names in copyArtifacts [OK]
Common Mistakes:
  • Forgetting quotes around job names
  • Assuming filter is mandatory
  • Ignoring existence of source job
5. You want to copy only the latest successful build's output.zip artifact from job PackageJob to your current job. Which snippet correctly does this?
hard
A. copyArtifacts(projectName: 'PackageJob', selector: latest(), filter: 'output.zip')
B. copyArtifacts(projectName: 'PackageJob', filter: 'output.zip')
C. copyArtifacts(projectName: 'PackageJob', selector: lastSuccessful(), filter: 'output.zip')
D. copyArtifacts(projectName: 'PackageJob', selector: lastCompleted(), filter: 'output.zip')

Solution

  1. Step 1: Understand selecting the build to copy from

    The selector parameter chooses which build's artifacts to copy. lastSuccessful() picks the latest successful build.
  2. Step 2: Verify filter and selector usage

    copyArtifacts(projectName: 'PackageJob', selector: lastSuccessful(), filter: 'output.zip') uses selector: lastSuccessful() and filters for 'output.zip', matching the requirement exactly.
  3. Final Answer:

    copyArtifacts(projectName: 'PackageJob', selector: lastSuccessful(), filter: 'output.zip') -> Option C
  4. Quick Check:

    Use selector lastSuccessful() to copy latest successful build [OK]
Hint: Use selector lastSuccessful() to get latest successful build artifacts [OK]
Common Mistakes:
  • Using selector latest() which is invalid
  • Omitting selector and copying from last build regardless of status
  • Using lastCompleted() which may include failed builds
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