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.

Reply via email to