Couple of approaches:

You could use the External Workspace Manager plugin: 
https://jenkins.io/doc/pipeline/steps/external-workspace-manager/

Or as Robert suggested use the ws(){} block, this should give a guarantee on 
the workspace but you’ll need to confirm that you’re not about to fill up your 
node’s disks with old workspaces: 
Something along the lines of:
def sharedWorkspace = “/shared-workspace/${JOB_NAME}/${BUILD_NUMBER}”
node(‘A’){
    ws(sharedWorkspace){
        //do stuff
    }
}
node(‘B’){}
node(‘A’){
    ws(sharedWorkspace){
        //do more stuff
    }
}

 

From: Robert Hales
Sent: 30 October 2017 03:04
To: Jenkins Users
Subject: Re: Using the same label multiple times in pipeline

If you have multiple nodes with a label of A, you will need to declare a 
variable to hold the name of the specific node you ended up on in the first 
"node" declaration, and then use that node in the third one: 

def allocatedNode

node('A') { allocatedNode = $NODE_NAME } //NODE_NAME is an environment variable 
provided by Jenkins
node('B') {}
node($NODE_NAME) {}


HOWEVER, be aware that this isn't always a safe thing to do, depending on what 
your goal is. There is no guarantee that the workspace that was used in the 
first node block will still be there when the third block gets there. Even if 
it is, there is no guarantee that the third block will use the original 
workspace. It probably will most of the time, but not guaranteed. Depending on 
what you are doing, you may need to allocate a custom workspace (still not a 
guaranteed solution), move to a separate directory, stash/unstash the things 
you need between nodes, or some other solution. 

On Sunday, October 29, 2017 at 8:51:02 PM UTC-6, Daniel Becroft wrote:
Hi,
I'm experimenting with the scripted pipeline, and have a question about the use 
of node('') with a label. If I have the following scenario:

node('A') { }
node('B') { }
node('A') { // Which node will be used here? }

Is there any guarantee that the second node() step for "A" will hit the same 
slave as the first one, or will it use whichever slave is now available? I'd 
like for the first node() to allocate one from the pool of slaves with the 
label of "A", but then the second one to somehow reuse the first one (there 
might be some cleanup tasks, etc that need to happen on the original node).

Cheers,
Daniel B.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/f43a48c1-15bd-4feb-9a91-3e818a3cf268%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/59f6eb23.c8e1500a.573c1.f1ae%40mx.google.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to