Hi Andres,
I've got one more interesting thing for you. I managed to get your sample
working even though I had to remove the functions:
def testList = "test1 test2".split()
def branches = [:]
for (int i = 0; i < testList.length; i++) {
def testName = testList[i];
branches[testName] = {
echo testName
sleep 20
}
}
parallel branches
What I found out is that I couldn't use the nice for loop because it fails
with:
java.io.NotSerializableException: java.util.AbstractList$Itr
...
Caused by: an exception which occurred:
in field itr
in field target
in field continue_
in field parent
in field capture
in field def
in field closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@8b36066
And when I put the creation of the branches in a function it started to
behave strangely.
On Sunday, September 27, 2015 at 10:25:47 PM UTC+2, Andres Rodriguez wrote:
>
> Hi Everyone,
>
> First of all, I want to say that I'm really enjoying the workflow plugin.
> Thanks for all the effort in bringing this feature to production. Specially
> loading the DSL file from a git repository allows us to auto-test our
> changes to a job through the same mechanism that we test changes to the
> code (using Gerrit).
>
> I'm currently encountering some weird behavior when generating a list of
> tests parallel branches dynamically. I've boiled it down to the following
> small test case that you can paste into the workflow script box:
>
> @NonCPS
> def generateTestBranches (testList) {
> def branches = [:]
> for (testName in testList.split()) {
> branches[testName] = {
> echo testName
> sleep 20
> }
> }
> return branches
> }
>
> def runTests (testList) {
> def testBranches = generateTestBranches(testList)
> parallel testBranches
> }
>
> runTests "test1 test2"
>
> The output of this job (it can't be aborted):
>
> Running: Execute sub-workflows in parallel : Start
> [test1] Running: Parallel branch: test1
> Aborted by anonymous <http://krussell:8080/user/anonymous>
> Aborted by anonymous <http://krussell:8080/user/anonymous>
> Aborted by anonymous <http://krussell:8080/user/anonymous>
>
>
> I've also tried replacing the "parallel testBranches" with a simple loop
> to execute the closures in the map manually (my understanding is that
> map.each is broken atm so I used a loop instead):
>
> for ( test in testBranches) {
> echo "executing ${test.key}"
> test.value()
> }
>
> And the output is as follows (note that it prints test2 instead of test1
> from inside the closure):
>
> Started by user anonymous <http://krussell:8080/user/null>
> Running: Print Message
> executing test1
> Running: Print Message
> test2
> Running: Print Message
> executing test2
> Running: Print Message
> test2
> Running: End of Workflow
> Finished: SUCCESS
>
>
> I'm not a Groovy expert (I just started learning for the workflow plugin),
> so I might be doing something dumb here. I'm trying to read the groovy docs
> to figure out if the way I'm generating the closure is an issue. But
> overall the state the system gets into seems to be pretty bad (can't abort
> the job). So I wanted to send out an email here just in case this is a
> problem with the Jenkins groovy core.
>
> Thanks again for the constant improvements to the workflow plugin.
>
> Regards,
> Andres
>
>
>
--
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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/683830a6-fba0-4135-bc73-0a8dbf7008ff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.