如何使用Jenkins管道在多个节点上运行相同的作业集

时间:2018-05-24 15:30:24

标签: testing jenkins parallel-processing jenkins-pipeline

我有一个启动虚拟机并对它们运行一些测试的管道。对于参数,我使用两个字符串:一个用于指示测试用例列表或VM管理操作,另一个用于指示节点名称列表。 目前,管道首先在一个节点上执行,然后在下一个节点上执行。我需要它们同时在所有节点上执行。 我尝试使用并行,它不能与for循环共存。 这是我的剧本:

nodes = params._RNX_OS.split('¤');
for (String VMnode : nodes) {

stage("Prepare environment"){
    build job: "TA_StartVM", parameters: [string(name: "_RNX_OS", value: VMnode), string (name:"_RNX_SNAPSHOT", value:"Configured")];
}

configs = params._RNX_STAGES.toString().split('¤');
for (String config : configs) {
    switch (config) {
        case "Restart":
            stage("Restart VM"){
            build job: 'TA_RestartVM', parameters: [string(name: "_RNX_OS", value: VMnode)];
            }
            break
        case ~/.*Start.*/:
                param = config.toString().split(':');
                snapshot = param[1];
            stage("Start VM"){
            build job: 'TA_StartVM', parameters: [string(name: "_RNX_OS", value: VMnode), string (name:"_RNX_SNAPSHOT", value: snapshot)];
            }
            break
         case "Shutdown":
            stage("Shut down VM"){
            build job: 'TA_ShutdownVM', parameters: [string(name: "_RNX_OS", value: VMnode)];
            }
            break
         case ~/.*Save.*/:
              param = config.toString().split(':');
                snapshot = param[1]
            stage("Save VM Snapshot"){
            build job: 'TA_SaveVMSnapshot', parameters: [string(name: "_RNX_OS", value: VMnode), string (name:"_RNX_SNAPSHOT", value: snapshot)];
            }
            break
        default:
        stage("Run " +config + " Test"){
            build job: 'TA_RunTest', parameters: [[$class: 'LabelParameterValue', name: 'node', label: VMnode], string(name: "_RNX_TESTCONF", value: config), string(name: "_RNX_OS", value: VMnode)], propagate: false;
        }
        break 
    }
}

stage("Test Results Table"){
        build job: 'TA_TestResultsTable',parameters: [[$class: 'LabelParameterValue', name: 'node', label: VMnode]], propagate: false;
}

stage("Publish Test Results"){
    build job: 'TA_CopyTestResults', propagate: false;
}
stage("Stop Slave"){
    build job: "TA_ShutdownVM", parameters: [string(name: "_RNX_OS", value: VMnode)];
}
}

1 个答案:

答案 0 :(得分:0)

我解决了! 找到了这个非常好的例子: https://jenkins.io/doc/pipeline/examples/ 我使用的是并行多个节点。