As far as I understand, you looked at the Build Flow plugin, but I'm not sure why you fired it. Perhaps you can point out holes in my sentence.
Assuming you have enough artists on your system to run tasks in parallel, I think the Build Flow plugin and Build Build Aggregator plugin can do what you want.
The Build Flow plugin supports the simultaneous execution of tasks . I see no reason why Build Flow cannot plan your "child" task in parallel with different parameters.
The assembly flow test aggregator captures the test results from the planned builds of the Build Flow job, so your “child” job will need to publish its own test results.
You will need to configure your "child" task so that it can run in parallel, checking if necessary, "Perform parallel assemblies" in the task configuration.
Regardless of which set of slaves allows you to connect to embedded devices, you will need a sufficient number of performers to run your tasks in parallel.
Update : with a simple build stream definition:
parallel ( { build("dbacher flow child", VALUE: 1) }, { build("dbacher flow child", VALUE: 2) }, { build("dbacher flow child", VALUE: 3) }, { build("dbacher flow child", VALUE: 4) } )
I get the output:
parallel { Schedule job dbacher flow child Schedule job dbacher flow child Schedule job dbacher flow child Schedule job dbacher flow child Build dbacher flow child
The task history shows that all four tasks are scheduled within a few seconds of each other. But the step of constructing the task contains an artificial delay (sleep mode), which does not allow you to quickly complete one separate assembly.
Update 2 . Here is an example of dynamically creating a list of parallel tasks from another data structure:
// create a closure for the deploy job for each server def paramValues = (1..4) def testJobs = [] for (param in paramValues) { def jobParams = [VALUE: param] def testJob = { // call build build(jobParams, "dbacher flow child") } println jobParams testJobs.add(testJob) } parallel(testJobs)
A list passed in parallel is a list of closures that invoke an assembly with unique parameters. I had to definitely define work parameters outside the closure function to ensure that tasks would be scheduled separately.
I cut the syntax from another answer and this thread on the Jenkins mailing list.
Dave bacher
source share