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 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