Well, you can try it yourself.  Apply a generic label on more than one 
node, run a pipeline and print hostname in different stage/node blocks and 
see if its the same throughout the pipeline. 

Alternatively, if you can use a shared folder between the slaves that might 
help as well.  I'm assuming you are only interested in the content that's 
stored on a slave and not the slave itself.  because the latter is 
worrisome.  

On Monday, July 31, 2017 at 3:14:24 PM UTC-7, Mark wrote:
>
> Hi Sam,
>
> Well, I couldn't see it documented anywhere that the originally allocated 
> node would be reused for subsequent node blocks with the same label, so I 
> assumed any specific behavior wasn't guaranteed. That's interesting what 
> you observed. I wonder if a Jenkins developer could comment on this?
>
>
> On Monday, July 31, 2017 at 3:49:23 PM UTC-5, Sam K wrote:
>>
>> Hi
>>   yes, naming them specifically is very limiting.  But my latest 
>> iterations of pipelines, I have to do that as I'm using one of the slaves 
>> as a apache host to serve logs on it as well. 
>>
>>   Anyways, before I did that, I had 2 slaves and had a common label on 
>> them called 'jenkins-slave' and in my pipeline when I used the label as 
>> 'jenkins-slave', it would pick the first or the second and use it 
>> throughout the pipeline.  It would never mix and match. As long as you have 
>> quite a few executors on each of them, as far as I can remember, it will 
>> use the same slave throughout the job.
>>
>>   Did you notice the pipeline using a different slave with the same label 
>> even with quite a few executors available? 
>>
>> sam
>>
>>
>> On Monday, July 31, 2017 at 1:26:09 PM UTC-7, Mark wrote:
>>>
>>> Thanks, Sam. 
>>>
>>> First, I should have stated that I'm using a Groovy pipeline. I'm not 
>>> entirely certain whether I've stayed within the limits of a declarative 
>>> pipeline, or I've moved into a scripted pipeline at this point.
>>>
>>> I was hoping to avoid pegging jobs to particular nodes within the 
>>> pipeline code itself (i.e. "windows-1", "linux-1"). I'd like the master to 
>>> allocate any available windows node and linux node and use those throughout 
>>> the job. I was hoping there was some means of getting a handle to whatever 
>>> node was allocated for a given label, then reusing that node later in the 
>>> job.
>>>
>>> Maybe I can illustrate what I'm trying to achieve with some pseudocode:
>>>
>>> // The nodes initially allocated for each label should be reused for 
>>> later steps
>>> // requiring those labels.
>>> parallel {
>>>     windows {
>>>         parallel {
>>>             checkout repo1
>>>             checkout repo2
>>>             checkout repo3
>>>         }
>>>         build server
>>>         start server
>>>     }
>>>     linux {
>>>         parallel {
>>>             checkout repo1
>>>             checkout repo2
>>>         }
>>>     }
>>> }
>>> // synchronized here - tests shouldn't start until checkouts are 
>>> complete on both nodes 
>>> // and server is built and running
>>> linux {
>>>     run tests against server
>>>     generate test report
>>> }
>>> windows {
>>>     stop server
>>> }
>>>
>>>
>>> Hopefully that clarifies what I'm going for. I kinda/sorta have this 
>>> working, but I'm cheating by using labels that apply only to a single 
>>> windows and linux node (i.e. what you suggested, Sam). That's pretty 
>>> limiting and not scalable, so I'm hoping there's a better way. 
>>>
>>> Thanks again!
>>>
>>>
>>> On Monday, July 31, 2017 at 1:49:16 PM UTC-5, Sam K wrote:
>>>>
>>>> I don't have all the answers, but most are embedded.  Firstly are you 
>>>> using the freestyle jobs or declarative groovy pipeline jobs? 
>>>>
>>>> On Monday, July 31, 2017 at 9:53:43 AM UTC-7, Mark wrote:
>>>>>
>>>>> Hi. Hoping someone here might be able to help or point me in the right 
>>>>> direction. I've been reading docs for many hours, and I can't find any 
>>>>> examples similar to what I'm trying to do.
>>>>>
>>>>> Here's what I want to do at a high level:
>>>>>
>>>>> I have multiple nodes, some have the "windows" label, others the 
>>>>> "linux" label.
>>>>>
>>>> >> You can add more than one label.  You can call it windows-1, Linux-1 
>>>> and use them in your pipelines.   
>>>>
>>>>>
>>>>> I want to run an end-to-end test that requires a server running on a 
>>>>> windows node, and a client running automated tests on a linux node 
>>>>> against 
>>>>> the windows server.
>>>>>
>>>>> First, run checkouts in parallel on both a windows node and a linux 
>>>>> node. The windows node needs to checkout 3 three svn repos (ideally, in 
>>>>> parallel), while the linux node needs to checkout 2 svn repos (ideally, 
>>>>> in 
>>>>> parallel).
>>>>>
>>>> >> You can add more than one scm repo in each job. Have a kick off job 
>>>> that calls both the freestyle jobs.  then checkouts can happen in 
>>>> parallel. 
>>>>  Or if you're using declarative pipeline, you can use the parallel blocks 
>>>> to checkout on both in parallel.  
>>>> https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Parallelism
>>>>  
>>>> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fjenkinsci%2Fpipeline-model-definition-plugin%2Fwiki%2FParallelism&sa=D&sntz=1&usg=AFQjCNG9PumS44svAGANCBDVelaQonGAQA>
>>>>
>>>>>
>>>>> Once the the checkout stage is done, on the windows node, build the 
>>>>> server, then run the server. 
>>>>>
>>>>> While the server continues to run on the windows node, run tests on 
>>>>> the linux node. (Note that my client doesn't need an explicit build 
>>>>> stage).
>>>>>
>>>>  
>>>>
>>>>> Once the tests complete, generate tests report on the linux node and 
>>>>> stop the server on the windows node.
>>>>>
>>>>
>>>>> - Is this pipeline possible? This seems like a pretty common scenario 
>>>>> (i.e. checkout on server + client in parallel, build, start server, run 
>>>>> tests on client).
>>>>>
>>>> >> Yes, its possible.   
>>>>
>>>>> - Is there any way to "reuse" a node allocated earlier? In my case, I 
>>>>> need to ensure that the same windows and linux nodes are always used and 
>>>>> the workspaces remain intact until the pipeline completes.
>>>>>
>>>> >> labels is the best way to use the same nodes
>>>>
>>>>> - What's the best way to synchronize the two nodes after the parallel 
>>>>> checkouts, 
>>>>>
>>>> >> Synchonize what??  
>>>>
>>>>> then ensure that the same nodes/workspaces continue to be used when 
>>>>> the windows server runs and the linux client tests execute?
>>>>>
>>>> >> You can use labels on each and choose that label.  Also, for 
>>>> workspace you can use custom workspace names which will be used over and 
>>>> over again.   
>>>>
>>>>>
>>>>> Thanks!
>>>>>
>>>>

-- 
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 jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/f83eafb6-3edd-4217-aca5-8483e2dc79b5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to