My mistake, the "def j = i" should be outside of the closure:

// construct and collect closures for LATER execution
buildClosures = []
for (int i = 1; i<50; i++) {
   def j = i
   def curClosure = {
        build("TestParameterized", "Parameter" : j)
    }
    buildClosures.add(curClosure)
}

// execute the closures in buildClosures in parallel
parallel(buildClosures)

I  ran this locally and got the expected results:

arallel {
    Schedule job TestParameterized
<http://bur1-d1033471:8080/job/TestParameterized/>
    Schedule job TestParameterized
<http://bur1-d1033471:8080/job/TestParameterized/>
    Schedule job TestParameterized
<http://bur1-d1033471:8080/job/TestParameterized/>
    *(truncated for brevity...)*
    Schedule job TestParameterized
<http://bur1-d1033471:8080/job/TestParameterized/>
    Schedule job TestParameterized
<http://bur1-d1033471:8080/job/TestParameterized/>
    Build TestParameterized #107
<http://bur1-d1033471:8080/job/TestParameterized/107/> started
    TestParameterized #107
<http://bur1-d1033471:8080/job/TestParameterized/107/> completed
    Build TestParameterized #108
<http://bur1-d1033471:8080/job/TestParameterized/108/> started
    TestParameterized #108
<http://bur1-d1033471:8080/job/TestParameterized/108/> completed
    Build TestParameterized #109
<http://bur1-d1033471:8080/job/TestParameterized/109/> started
*(truncated for brevity...)*
    TestParameterized #154
<http://bur1-d1033471:8080/job/TestParameterized/154/> completed
    Build TestParameterized #155
<http://bur1-d1033471:8080/job/TestParameterized/155/> started
    TestParameterized #155
<http://bur1-d1033471:8080/job/TestParameterized/155/> completed
}
Finished: SUCCESS



On Thu, May 1, 2014 at 3:50 AM, Peter Lenson <[email protected]> wrote:

> Stuart I still get the same result using your suggestion...below is
> exactly what I did and my results:
>
> I created a build flow job called *TestJobDSL* containing the following
> script in the "Define build flow using flow DSL" section of Build
> Triggers:
>
> // construct and collect closures for LATER execution
> buildClosures = []
> for (int i=1; i<50; i++) {
>     def curClosure = {
>         def j = i
>         build("TestParameterized", Parameter: j)
>     }
>     buildClosures.add(curClosure)
> }
>
> // execute the closures in buildClosures in parallel
> parallel(buildClosures)
>
> *TestParameterized *was created as  free-style job with one parameter.
> In the build section, I have a "Windows Execute Batch  Command" s
> containing the following:
>
> echo %Parameter%
>
> When I run *TestJobDSL* this is what I see in the console:
>
> Started by user XXXXXX
> [EnvInject] - Loading node environment variables.
> Building on master in workspace 
> C:\Users\XXXXXX\.jenkins\jobs\TestJobDSL\workspace
> parallel {
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>
> *... (truncated for brevity)*
>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>*    ... (truncated for 
> brevity)*
>     Schedule job TestParameterize 
> <http://localhost:8082/job/TestParameterized/>*d*
>
>  ... truncated for brevity
>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>
> *... (truncated for brevity)*
>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Schedule job TestParameterized 
> <http://localhost:8082/job/TestParameterized/>
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     Build TestParameterized #6 
> <http://localhost:8082/job/TestParameterized/6/> started
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>
> *... (truncated for brevity)*
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     TestParameterized #6 <http://localhost:8082/job/TestParameterized/6/> 
> completed
>     Build TestParameterized #7 
> <http://localhost:8082/job/TestParameterized/7/> started
>     Build TestParameterized #7 
> <http://localhost:8082/job/TestParameterized/7/> started
>
> *... (truncated for brevity)*
>
>     Build TestParameterized #7 
> <http://localhost:8082/job/TestParameterized/7/> started
>     Build TestParameterized #7 
> <http://localhost:8082/job/TestParameterized/7/> started
>     TestParameterized #7 <http://localhost:8082/job/TestParameterized/7/> 
> completed
>
> *... (truncated for brevity)*
>     TestParameterized #7 <http://localhost:8082/job/TestParameterized/7/> 
> completed
> }
> Finished: SUCCESS
>
>
> *TestParameterized *contains two runs 6,7 each containing the following 
> console output:
>
>
> Started by build flow TestJobDSL#114
> Started by build flow TestJobDSL#114
>
> *... (truncated for brevity)*
>
> Started by build flow TestJobDSL#114 Started by build flow TestJobDSL#114
> [EnvInject] - Loading node environment variables. Building remotely on
> Slave1 <http://localhost:8082/computer/Slave1> in workspace
> c:\Slave1RemoteFS\workspace\TestParameterized [TestParameterized] $ cmd /c
> call C:\Users\XXXXXX\AppData\Local\Temp\hudson2441697324175984667.bat
> c:\Slave1RemoteFS\workspace\TestParameterized>echo 50 50
> c:\Slave1RemoteFS\workspace\TestParameterized>exit 0 Finished: SUCCESS
>
>
>
> As you can see only the terminal loop value "50" is used.
>
>
> What do you get when you run the examples above?
>
>
> Thanks
>
>
>
> On Mon, Apr 28, 2014 at 12:27 AM, Stuart Rowe <[email protected]>wrote:
>
>> As Marc pointed out, the variable "i" isn't private to each closure
>> because it's defined outside of the scope.
>>
>> One solution would be to copy the value of i to a variable defined within
>> the scope of the closure:
>>
>>
>> for (int i=1; i<50; i++) {
>>     def curClosure = {
>>         def j = i
>>         build("TestParameterized", Parameter: j)
>>     }
>>     buildClosures.add(curClosure)
>> }
>>
>> Because each of your schedule jobs for TestParamaterized had the same 
>> parameters, the Jenkins scheduler actually merged the tasks to reduce 
>> redundancies.
>>
>>
>> On Wednesday, 23 April 2014 13:52:46 UTC-7, [email protected] wrote:
>>>
>>> Thanks for the suggestion.. .but same result
>>>
>>> On Wednesday, April 23, 2014 11:55:29 AM UTC-7, Marc MacIntyre wrote:
>>>>
>>>> I assume that you only end up defining one curClosure variable, since
>>>> it never goes out of scope, and subsequent changes to it update the one
>>>> version you've added to your buildClosures list.
>>>>
>>>> Maybe you want buildClosures.add(curClosure.clone())
>>>>
>>>  --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Jenkins Users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/jenkinsci-users/2swVIxjzdZc/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "Jenkins Users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/jenkinsci-users/2swVIxjzdZc/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> 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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to