2014-01-26 3 views
1

Я хотел бы выполнить параллельные (дочерние) задания в jenkins на основе конфигурации параметров родительских заданий. Вот мой текущий код с результатом:Jenkins build flow plugin Выполнение выбранных заданий

CODE: 
jobs2=[] 
jobs2.add({build("ChildJob", param1:"nyan")}) 
jobs2.add({build("ChildJob", param1:"cat")}) 
out.println(jobs2) 
parallel (jobs2) 

jobs=[] 
testnodes=params["testnodes"].split(' ') 
for (testnode in testnodes) { 
    out.println("Testnode:" + testnode) 
    newjob={build("ChildJob", param1:testnode)} 
    out.println("New job:" + newjob) 
    jobs.add(newjob) 
} 
out.println(jobs) 

parallel (jobs) 

// OUTPUT: 
Started by user anonymous 
Building in workspace C:\Users\laszlo\.jenkins\workspace\Demo_Main 
[[email protected], [email protected]] 
parallel { 
    Schedule job ChildJob 
    Schedule job ChildJob 
    Build ChildJob #36 started 
    ChildJob #36 completed 
    Build ChildJob #37 started 
    ChildJob #37 completed 
} 
Testnode:node1 
New job:[email protected] 
Testnode:node2 
New job:[email protected] 
Testnode:node3 
New job:[email protected] 
Testnode:node4 
New job:[email protected] 
[[email protected], [email protected], [email protected], [email protected]] 
parallel { 
    Schedule job ChildJob 
    Schedule job ChildJob 
    Schedule job ChildJob 
    Schedule job ChildJob 
    Build ChildJob #38 started 
    Build ChildJob #38 started 
    Build ChildJob #38 started 
    Build ChildJob #38 started 
    ChildJob #38 completed 
    ChildJob #38 completed 
    ChildJob #38 completed 
    ChildJob #38 completed 
} 
Finished: SUCCESS 

Почему начинают только одну работу, как я могу запустить «количество узлов» раздельных рабочих мест, как в первой половине?

ответ

1

На самом деле я нашел способ решить проблему и опубликовать ее, возможно, это поможет кому-то. Вот фиктивное решение:

ArrayList<String> examplestrings = new ArrayList<String>() 
examplestrings.add("A") 
examplestrings.add("B") 
examplestrings.add("C") 
examplestrings.add("D") 
examplestrings.add("E") 
def jobs = [] 
for (int i = 0 ; i < 5; i++) { 
    def closure = { 
     def element = "" 
     synchronized (examplestrings) { 
      element = examplestrings.get(0) 
      examplestrings.remove(element) 
     } 
     build("ChildJob", param1:element) 
    } 
    jobs.add(closure) 
} 

parallel (jobs) 

Из каждой работы будет таким же внутри, так и ведет себя так же, как я создал список, из которого они могут принести различные значения для работы.

Смежные вопросы