Программный доступ к дочерним сборкам в потоке сборки Jenkins

У меня есть конвейер сборки (https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin) в Jenkins, которая порождает два или более дочерних задания, каждое из которых запускает тесты Junit.

def childjobs = []

// some logic to populate the children jobs array

// Run the jobs in parallel
parallel(childjobs)

Я пытаюсь написать сценарий Groovy в контексте родительского задания, используя Jenkins API, чтобы отправить сводное электронное письмо от родительского задания, собирая сводки от дочерних элементов.

Как я могу получить доступ к информации о сборке (успех / неудача, сколько отказов, продолжительность, результаты Junit и т. Д.) Дочерних заданий из родительского задания? Концептуально примерно так:

for (AbstractBuild<?,?> childjob in childjobs) {
    // get build info from childjob
    // get Junit results from childjob
}

person naspras    schedule 25.03.2016    source источник
comment
Посмотрите, поможет ли это вам stackoverflow.com/questions/19808181/   -  person Tuffwer    schedule 26.03.2016
comment
Спасибо @Tuffwer. Информация в публикации в основном связана с объединением артефактов из дочерних заданий в родительскую. Мое требование отличается тем, что я пытаюсь получить доступ к объектам дочерних заданий из родительского задания.   -  person naspras    schedule 28.03.2016


Ответы (1)


Мне потребовалось время, чтобы поиграть с Build Flow и Jenkins API, и, наконец, я получил следующее:

import hudson.model.*
import groovy.json.*

// Assign a variable to the flow run
def flow = parallel(
  {build("child-dummy", branch_name: "child1")},
  {build("child-dummy", branch_name: "child2")}
)

println 'Main flow ' + flow.getClass().toString() + ', size: ' + flow.size()
flow.each { it ->                                           // type = com.cloudbees.plugins.flow.FlowState  
  def jobInvocation = it.getLastBuild()                     // type = com.cloudbees.plugins.flow.JobInvocation
  println 'Build number #' + jobInvocation.getNumber()  
  println 'Build URL ' + jobInvocation.getBuildUrl()
}

Чтобы получить подробные сведения о выполнении, такие как артефакты и т. Д., Из дочерних заданий, используйте метод jobInvocation.getBuild(), который возвращает экземпляр Run.

Получение результатов Junit должно быть простым путем анализа файла результатов JSON, как указано в Как получить количество тестов, запущенных в Jenkins с форматом JUnit XML в сценарии задания публикации?.

person naspras    schedule 28.03.2016