22
votes

I'm trying to move existing Jenkins build jobs to a single Jenkins 2 pipelines, and wondering if it's possible to copy files from one node to another within the build. My idea would be :

Node A (Windows)
  Checkout scm
  Execute ant build
  Archive artifact (or whatever required action)
Node B (Unix)
  Checkout scm
  Copy build artifact from node A --> is this possible ?
  Execute ant build
  Then followed by tests...

I've tried to use the copy artifact step, but it didn't seem to work correctly, so I'm wondering if there's a way to copy files in the middle of the pipeline, or if I have to stay with the current build architecture (using copy artifact plugin, but with completely separate build jobs).

1
Welcome to stackoverflow. You could just include the code that "didn't seem to work correctly" in your posting... ;-)StephenKing
I was using step([$class: 'ArtifactArchiver', artifacts: 'dist/*.zip']) to archive the artifact on the first node, and step([$class: 'CopyArtifact', filter: 'dist/*.zip', fingerprintArtifacts: true, projectName: 'PCT') but artifacts seem to be only available after the end of the buildGilles QUERRET

1 Answers

24
votes

Yes, this is possible using the stash/unstash steps.

A tutorial about this can also be found in the Jenkins Blog (focused on parallel execution):

parallel (
    "stream 1" : { 
                     node { 
                           unstash "binary"                           
                           sh "sleep 20s" 
                           sh "echo hstream1"
                       } 
                   },
    "stream 2" : { 
                     node { 
                           unstash "binary"
                           sh "echo hello2"
                           sh "hashtag fail"                                                       
                       } 
                   }
          )