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.