Bird
Raised Fist0
Jenkinsdevops~5 mins

Stash and unstash for passing data in Jenkins - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of stash in Jenkins pipelines?

stash saves files temporarily during a pipeline run so they can be used later in another stage or node.

Click to reveal answer
beginner
How does unstash complement stash in Jenkins?

unstash retrieves the files saved by stash so they can be used in a different stage or node.

Click to reveal answer
intermediate
Can stash and unstash be used to pass data between parallel stages?

Yes, stash and unstash allow sharing files between parallel or sequential stages in Jenkins pipelines.

Click to reveal answer
intermediate
What happens if you try to unstash a name that was never stashed?

Jenkins throws an error because it cannot find the stash with that name.

Click to reveal answer
beginner
Write a simple Jenkins pipeline snippet that stashes a file named output.txt and then unstashes it in the next stage.
stage('Save') {
  steps {
    writeFile file: 'output.txt', text: 'Hello'
    stash name: 'myFiles', includes: 'output.txt'
  }
}
stage('Use') {
  steps {
    unstash 'myFiles'
    sh 'cat output.txt'
  }
}
Click to reveal answer
What does the stash step do in Jenkins pipelines?
AStarts a new pipeline
BSaves files temporarily for later use in the pipeline
CRuns a shell command
DDeletes files from the workspace
Which step retrieves files saved by stash?
Astash
Barchive
Cunstash
Dcheckout
Can stash and unstash be used across different nodes in a Jenkins pipeline?
AOnly for parallel stages
BNo, only within the same node
COnly if nodes share the same workspace
DYes, they allow passing files between nodes
What will happen if you try to unstash a stash name that does not exist?
AJenkins throws an error and stops the pipeline
BJenkins ignores it silently
CJenkins creates an empty stash
DJenkins retries the stash
Which of these is a correct way to stash all files in the workspace?
Astash name: 'all', includes: '**/*'
Bstash name: 'all', excludes: '**/*'
Cunstash name: 'all'
Dstash name: 'all', files: '*'
Explain how stash and unstash help pass data between stages in Jenkins pipelines.
Think about how you might pack and unpack a suitcase to carry things between places.
You got /4 concepts.
    Describe a scenario where using stash and unstash is necessary in a Jenkins pipeline.
    Imagine you bake cookies in one kitchen and want to eat them in another kitchen.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of stash and unstash in Jenkins pipelines?
      easy
      A. To temporarily save and later restore files between pipeline stages
      B. To permanently store files on the Jenkins master server
      C. To delete files after a pipeline stage completes
      D. To send notifications when a stage finishes

      Solution

      1. Step 1: Understand the role of stash

        The stash command saves files temporarily during a pipeline run.
      2. Step 2: Understand the role of unstash

        The unstash command restores those saved files in later stages or nodes.
      3. Final Answer:

        To temporarily save and later restore files between pipeline stages -> Option A
      4. Quick Check:

        stash + unstash = temporary file sharing [OK]
      Hint: Remember stash saves, unstash restores files between stages [OK]
      Common Mistakes:
      • Thinking stash permanently stores files
      • Confusing stash with deleting files
      • Assuming stash sends notifications
      2. Which of the following is the correct syntax to stash files named output.log in a Jenkins pipeline?
      easy
      A. stash { name: 'logs', files: 'output.log' }
      B. stash('logs', 'output.log')
      C. stash name = 'logs' include = 'output.log'
      D. stash name: 'logs', includes: 'output.log'

      Solution

      1. Step 1: Recall stash syntax

        The correct stash syntax uses named parameters: stash name: '...', includes: '...'.
      2. Step 2: Match options to syntax

        stash name: 'logs', includes: 'output.log' matches the correct syntax exactly.
      3. Final Answer:

        stash name: 'logs', includes: 'output.log' -> Option D
      4. Quick Check:

        stash uses named params: name and includes [OK]
      Hint: Use named parameters: name and includes for stash [OK]
      Common Mistakes:
      • Using parentheses like a function call
      • Using incorrect parameter names like files
      • Using assignment (=) instead of colon (:)
      3. Given this Jenkins pipeline snippet:
      stage('Build') {
        steps {
          sh 'echo Hello > message.txt'
          stash name: 'msg', includes: 'message.txt'
        }
      }
      stage('Test') {
        steps {
          unstash 'msg'
          sh 'cat message.txt'
        }
      }

      What will be the output of the cat message.txt command in the Test stage?
      medium
      A. Hello
      B. No such file or directory
      C. Empty output
      D. Error: stash not found

      Solution

      1. Step 1: Understand stash saves message.txt

        The Build stage creates message.txt with content 'Hello' and stashes it as 'msg'.
      2. Step 2: Unstash restores message.txt in Test stage

        The Test stage unstashes 'msg', restoring message.txt, then runs cat message.txt.
      3. Final Answer:

        Hello -> Option A
      4. Quick Check:

        unstash restores files, so cat shows 'Hello' [OK]
      Hint: Unstash restores files exactly as stashed [OK]
      Common Mistakes:
      • Assuming unstash does not restore files
      • Expecting an error because stages run separately
      • Thinking stash deletes files
      4. You wrote this Jenkins pipeline snippet:
      stage('Build') {
        agent { label 'build' }
        steps {
          sh 'touch file.txt'
          stash name: 'data', includes: 'file.txt'
        }
      }
      stage('Deploy') {
        agent { label 'deploy' }
        steps {
          unstash 'artifacts'
          sh 'cat file.txt'
        }
      }

      But the Deploy stage fails with cat: file.txt: No such file or directory. What is the most likely cause?
      medium
      A. The unstash command is missing in the Deploy stage
      B. The file.txt was not created before stashing
      C. The stash name used in unstash does not match the stash name
      D. The pipeline syntax for stash is incorrect

      Solution

      1. Step 1: Check stash and unstash names

        The stash is named 'data' but unstash uses 'artifacts', so names do not match.
      2. Step 2: Verify file creation and stash syntax

        file.txt is created before stash, unstash command is present, and stash syntax looks correct. Different agents require proper stash/unstash to pass files.
      3. Step 3: Identify the cause

        Mismatched names cause unstash to fail silently, so file.txt is not available in Deploy workspace.
      4. Final Answer:

        The stash name used in unstash does not match the stash name -> Option C
      5. Quick Check:

        stash and unstash names must match exactly [OK]
      Hint: Check stash and unstash names match exactly [OK]
      Common Mistakes:
      • Using different names in stash and unstash
      • Forgetting to create the file before stash
      • Omitting unstash command in later stage
      5. You want to pass multiple files from a Build stage to a Test stage in Jenkins. Which is the best way to stash and unstash these files?
      hard
      A. stash name: 'allFiles', includes: '*.log, *.txt' ... unstash 'allFiles'
      B. stash name: 'allFiles', includes: '**/*.log, **/*.txt' ... unstash 'allFiles'
      C. stash name: 'allFiles', includes: '**/*.log **/*.txt' ... unstash 'allFiles'
      D. stash name: 'allFiles', includes: '*.log *.txt' ... unstash 'allFiles'

      Solution

      1. Step 1: Understand includes pattern syntax

        Jenkins stash supports comma-separated glob patterns with '**/' for recursive matching.
      2. Step 2: Compare options

        stash name: 'allFiles', includes: '**/*.log, **/*.txt' ... unstash 'allFiles' uses comma-separated recursive globs, which is correct. Options A, B, and C either lack recursion (A, B) or use spaces instead of commas (B, C). For example, '**/*.log **/*.txt' misses comma separator.
      3. Final Answer:

        stash name: 'allFiles', includes: '**/*.log, **/*.txt' ... unstash 'allFiles' -> Option B
      4. Quick Check:

        Use comma-separated globs with '**/' for multiple file types [OK]
      Hint: Use comma-separated globs with '**/' for multiple files [OK]
      Common Mistakes:
      • Using spaces instead of commas to separate globs
      • Missing recursive '**/' causing files to be skipped
      • Incorrect glob syntax causing no files to stash
      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