如何在jenkins管道中向下游传递并行构建的参数

如何在jenkins管道中向下游传递并行构建的参数,jenkins,groovy,robotframework,jenkins-pipeline,Jenkins,Groovy,Robotframework,Jenkins Pipeline,我一直试图在jenkins建立一个管道,并行运行我的所有机器人测试构建,然后在它们全部完成后,运行另一个构建,包括发送一封电子邮件,其中包含所有测试的结果(而不是每个构建发送一封垃圾邮件) 我知道robot插件返回我们当前使用的变量$(robot\u passercentage)和$(robot\u PASSRATIO)。我希望有一种方法可以提取它们,并将其用作下游管线构建的参数 作为一个测试,我尝试了下面的groovy表单,但无法理解如何获取变量并传递到下游构建中 谢谢你的帮助 stage('

我一直试图在jenkins建立一个管道,并行运行我的所有机器人测试构建,然后在它们全部完成后,运行另一个构建,包括发送一封电子邮件,其中包含所有测试的结果(而不是每个构建发送一封垃圾邮件)

我知道robot插件返回我们当前使用的变量$(robot\u passercentage)和$(robot\u PASSRATIO)。我希望有一种方法可以提取它们,并将其用作下游管线构建的参数

作为一个测试,我尝试了下面的groovy表单,但无法理解如何获取变量并传递到下游构建中

谢谢你的帮助

stage('set up') {
node {
    build job: 'setup', propagate: false
}
}

stage('run suites') {
parallel 'test set 1':{
    node {
        build job: 'test set 1', propagate: false
        def 1_PASSPERCENTAGE = build.buildVariableResolver.resolve("ROBOT_PASSPERCENTAGE")
        def 1_PASSRATIO = build.buildVariableResolver.resolve("ROBOT_PASSRATIO")
        println "FOO=$CRM_PASSPERCENTAGE"
        println "FOO=$CRM_PASSRATIO"
    }
}, 'test set 2':{
    node {
        build job: 'thankQ Robot Mission Personnel Tests', propagate: false
        def 2_PASSPERCENTAGE = build.buildVariableResolver.resolve("ROBOT_PASSPERCENTAGE")
        def 2_PASSRATIO = build.buildVariableResolver.resolve("ROBOT_PASSRATIO")
        println "FOO=$MP_PASSPERCENTAGE"
        println "FOO=$MP_PASSRATIO"
    }
}
}
stage('results') {
node {
    println "FOO=$2_PASSPERCENTAGE"
    println "FOO=$2_PASSRATIO"
    println "FOO=$1_PASSPERCENTAGE"
    println "FOO=$1_PASSRATIO"
}
}
从中,可以使用以下参数调用下游作业:

build job: downstreamJob, parameters: [
      [$class: 'StringParameterValue', name: 'passPercentage', value: "${1_PASSPERCENTAGE}"],
      [$class: 'StringParameterValue', name: 'passRatio', value: "${1_PASSRATIO}"]
]
def robotLog = script: 'curl http://your-jenkins/job/test-set-1/lastBuild/robot.log', returnStdout: true // First determine which URL corresponds to the robot.log file, or use the main page of your build.
def percentageMatcher = robotLog.trim() =~ 'Pass percentage.*(\\d+)%'  // Again, find the exact regex here
def 1_PASSPERCENTAGE = percentageMatcher[0][1]

... // Same thing with pass ratio...
至于如何获取Robot变量,我从未使用过它,但我想您可以始终使用测试构建的URL(例如,您的
测试集1
作业)并解析日志文件或构建页面以查找变量。大概是这样的:

build job: downstreamJob, parameters: [
      [$class: 'StringParameterValue', name: 'passPercentage', value: "${1_PASSPERCENTAGE}"],
      [$class: 'StringParameterValue', name: 'passRatio', value: "${1_PASSRATIO}"]
]
def robotLog = script: 'curl http://your-jenkins/job/test-set-1/lastBuild/robot.log', returnStdout: true // First determine which URL corresponds to the robot.log file, or use the main page of your build.
def percentageMatcher = robotLog.trim() =~ 'Pass percentage.*(\\d+)%'  // Again, find the exact regex here
def 1_PASSPERCENTAGE = percentageMatcher[0][1]

... // Same thing with pass ratio...

这对下游部分很有帮助,另一部分是我没有从构建中正确读取变量,我不确定如何获取这些变量并将其取出。它们是由robot插件创建的,而不是标准的。有什么想法吗?