If you have the executors, the builds should run in parallel. Given the 
following script in the Script Console (and jobs named wait1..wait4 with 
different durations):
---
def futures = []
[1, 2, 3, 4].each {
  futures.add Jenkins.instance.getItemByFullName("wait${it}").scheduleBuild2(0)
}
futures.each {
  println it.get().time
  println it.get().duration // millis
}
---
The following output is printed:
---
Sun Mar 09 23:18:12 CET 2014
20025
Sun Mar 09 23:18:12 CET 2014
10031
Sun Mar 09 23:18:22 CET 2014
25027
Sun Mar 09 23:18:32 CET 2014
15026
---
I have two executors, and you can see the first two started at the same time, 
the third when the second was finished, the fourth when the first was finished.

Note that get() is a blocking call, and it waits for the related build to 
complete. That build isn't necessarily the one finishing first -- there's a 
chance you'll wait for the longest-running build first in the second loop, only 
to then get the subsequent results immediately, because they've finished long 
ago. Perhaps you can use Future.get(long,TimeUnit) instead if you want to 
present the results in the order they are available.

Another possible issue: Did you make sure that your queue does not simply 
collapse multiple executions of the same job into one, because they're 
considered equal?

On 09.03.2014, at 22:52, dev123 <delber...@gmail.com> wrote:

> Not sure I understand I now do:
> 
> 
>     for (int i = 0; i < 4; i++) {
>       try {
>         QueueTaskFuture<?> scheduleBuild2 = project.scheduleBuild2(0, new 
> Cause.UserCause(), myActions[i]);
>         queue.add(scheduleBuild2);
>       } catch (Exception e) {
>         throw new AbortException(e.getMessage());
>       }
>     }
> 
>     for (QueueTaskFuture<?> q : queue) {
>       q.get();
>     }
> 
> 
> I need to get the results from each job and print some info but it still does 
> not execute in parallel. 
> 
> I also found this:
> 
> Queue$Item item = Jenkins.getInstance().getQueue().schedule2(null, 0,  
> myActions[i])
> 
> But I still does not give me what I want.
> 
> 
> On Sunday, March 9, 2014 10:32:31 PM UTC+1, Daniel Beck wrote:
> Don't immediately call .get(), instead assign the Future returned from 
> scheduleBuild2 to a variable. Only .get() once you're willing to wait for the 
> build to complete. 
> 
> On 09.03.2014, at 22:27, dev123 <delb...@gmail.com> wrote: 
> 
> > In a jenkins plugin I am writing I need to run 5 jobs in parallel. 
> > Currently I do (sequentially): 
> > 
> >     for (int i = 0; i < 4; i++) { 
> >       try { 
> >         build = project.scheduleBuild2(0, new Cause.UserCause(), 
> > myActions[i]).get(); 
> >       } catch (Exception e) { 
> >         throw new AbortException(e.getMessage()); 
> >       }       
> >     } 
> > 
> > How do I trigger these jobs to run in parallel - each one on a separate 
> > executor? 
> > 
> > 
> > -- 
> > 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-use...@googlegroups.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 jenkinsci-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to