【问题标题】:How can I pass parameters from parallel builds downstream in a jenkins pipeline如何在 jenkins 管道中从下游并行构建传递参数
【发布时间】:2017-01-23 15:53:48
【问题描述】:

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

我知道机器人插件返回我们当前使用的变量 $(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=$2_PASSPERCENTAGE"
    println "FOO=$2_PASSRATIO"
    println "FOO=$1_PASSPERCENTAGE"
    println "FOO=$1_PASSRATIO"
}
}

【问题讨论】:

    标签: jenkins groovy robotframework jenkins-pipeline


    【解决方案1】:

    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...
    

    【讨论】:

    • 这对下游部分非常有帮助,另一部分是我实际上并没有从构建中正确读取变量,我不确定如何获取这些变量并将它们拉出来。它们是由机器人插件创建的,而不是标准的。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-01-01
    • 2019-12-19
    • 2013-12-20
    • 1970-01-01
    相关资源
    最近更新 更多