groovy - Parallel jobs using build flow plugin with loop in jenkins -
i building jenkins flow using build flow plugin grab of jobs, compare name regex, , if matches trigger build of job.
have working perfectly:
import jenkins.model.jenkins import java.util.regex.* pattern myregex = ~/release_status.*/ (item in jenkins.model.jenkins.instance.items) { if (item.name ==~ myregex) { build( "$item.name" ) } } however takes long time build of matching jobs (right there 20 there many more).
trying make run each job in parallel can't figure out groovy syntax.
have tried 3 different ways:
import jenkins.model.jenkins import java.util.regex.* pattern myregex = ~/release_status.*/ parallel ( { (item in jenkins.model.jenkins.instance.items) { if (item.name ==~ myregex) { build( "$item.name" ) } } } ) ^^this still works, works same way before. goes 1 job @ time , not build next until previous 1 finishes.
import jenkins.model.jenkins import java.util.regex.* pattern myregex = ~/release_status.*/ parallel ( { (item in jenkins.model.jenkins.instance.items) { if (item.name ==~ myregex) { { build( "$item.name" ) }, } } } ) ^^this errors
script1.groovy: 9: ambiguous expression either parameterless closure expression or isolated open code block; solution: add explicit closure parameter list, e.g. {it -> ...}, or force treated open block giving label, e.g. l:{...} @ line 9, column 9. { build( "$item.name" ) }, break
import jenkins.model.jenkins import java.util.regex.* pattern myregex = ~/release_status.*/ parallel ( [ (item in jenkins.model.jenkins.instance.items) { if (item.name ==~ myregex) { useless: { build( "$item.name" ) }, } } ] ) break
import jenkins.model.jenkins import java.util.regex.* pattern myregex = ~/release_status.*/ parallel ( (item in jenkins.model.jenkins.instance.items) { if (item.name ==~ myregex) { { build( "$item.name" ) }, } } ) both of blocks above error following:
org.codehaus.groovy.control.multiplecompilationerrorsexception: startup failed: script1.groovy: 5: unexpected token: @ line 5, column 5. (item in jenkins.model.jenkins.instance.items) a lot of code here simple. looking around can't find many resources on groovy.
parallel takes list of closures, should able use collect return list:
import jenkins.model.jenkins import java.util.regex.* pattern myregex = ~/release_status.*/ parallel jenkins.model.jenkins.instance.items.collect { item -> { -> if (item.name ==~ myregex) { build( "$item.name" ) } } } an alternative returns closure if name passes (rather closure every item, lot of finish early) is:
import jenkins.model.jenkins import java.util.regex.* pattern myregex = ~/release_status.*/ parallel jenkins.instance.items.findall { item -> item.name ==~ myregex} .collect { item -> { -> build("$item.name") } }
Comments
Post a Comment