如何在 jenkins 管道中从并行构建的下游传递参数
How can I pass parameters from parallel builds downstream in a jenkins pipeline
我一直在尝试在 jenkins 中设置一个管道,它并行运行我所有的机器人测试构建,然后在它们全部完成后运行另一个构建,其中包括发送一封包含所有测试结果的电子邮件(而不是每个版本发送 1 个垃圾邮件)。
我知道机器人插件 returns 我们当前使用的变量 $(ROBOT_PASSPERCENTAGE) 和 $(ROBOT_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=_PASSPERCENTAGE"
println "FOO=_PASSRATIO"
println "FOO=_PASSPERCENTAGE"
println "FOO=_PASSRATIO"
}
}
从 Jenkins pipeline steps reference 开始,您可以使用如下参数调用下游作业:
build job: downstreamJob, parameters: [
[$class: 'StringParameterValue', name: 'passPercentage', value: "${1_PASSPERCENTAGE}"],
[$class: 'StringParameterValue', name: 'passRatio', value: "${1_PASSRATIO}"]
]
至于如何获取您的机器人变量,我从未使用过它,但我想您总是可以使用测试构建的 URL(例如您的 test set 1
作业)并解析日志文件或您要查找的变量的构建页面。像这样:
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...
我一直在尝试在 jenkins 中设置一个管道,它并行运行我所有的机器人测试构建,然后在它们全部完成后运行另一个构建,其中包括发送一封包含所有测试结果的电子邮件(而不是每个版本发送 1 个垃圾邮件)。
我知道机器人插件 returns 我们当前使用的变量 $(ROBOT_PASSPERCENTAGE) 和 $(ROBOT_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=_PASSPERCENTAGE"
println "FOO=_PASSRATIO"
println "FOO=_PASSPERCENTAGE"
println "FOO=_PASSRATIO"
}
}
从 Jenkins pipeline steps reference 开始,您可以使用如下参数调用下游作业:
build job: downstreamJob, parameters: [
[$class: 'StringParameterValue', name: 'passPercentage', value: "${1_PASSPERCENTAGE}"],
[$class: 'StringParameterValue', name: 'passRatio', value: "${1_PASSRATIO}"]
]
至于如何获取您的机器人变量,我从未使用过它,但我想您总是可以使用测试构建的 URL(例如您的 test set 1
作业)并解析日志文件或您要查找的变量的构建页面。像这样:
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...