Как запустить один и тот же набор заданий на нескольких узлах, используя Jenkins Pipeline - PullRequest
0 голосов
/ 24 мая 2018

У меня есть конвейер, который запускает виртуальные машины и запускает на них несколько тестов.Для параметров я использую две строки: одну для указания списка тестовых случаев или операций управления ВМ, а другую для списка имен узлов.В настоящее время конвейер выполняется сначала на одном узле, а затем на следующем.Мне нужно, чтобы он выполнялся на всех узлах одновременно.Я попытался использовать параллель, и он не может сосуществовать с циклами 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 голосов
/ 25 мая 2018

Я решил это!Нашел этот очень хороший набор примеров: https://jenkins.io/doc/pipeline/examples/ Я использую параллельные множественные узлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...