以编程方式访问Jenkins构建流程中的子构建

时间:2016-03-25 21:19:50

标签: email jenkins groovy jenkins-build-flow

我在Jenkins中设置了一个构建流程管道(https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin),它生成了两个或多个子作业,每个作业都运行Junit测试。

def childjobs = []

// some logic to populate the children jobs array

// Run the jobs in parallel
parallel(childjobs)

我正在尝试使用Jenkins API在父作业的上下文中编写Groovy脚本,以通过从子作业中收集摘要来从父作业发送摘要电子邮件。

如何从父作业访问子作业的构建信息(成功/失败,失败次数,持续时间,Junit结果等)? 概念上是这样的

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

1 个答案:

答案 0 :(得分: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方法。

通过解析How to get the number of tests run in Jenkins with JUnit XML format in the post job script?中指定的JSON结果文件,获取Junit结果应该很容易。