Это не обычный вопрос «Выполнить эту работу на многих подчиненных»!
Ответы на резаки печенья не подходят.
Вариант использования
Я пытаюсь использовать конвейер Jenkins, чтобы провести тестирование для распределенного программного обеспечения, которое включает в себя один «клиент» и множество «серверов», выделив подчиненные Jenkins для этих ролей, запустив компоненты на подчиненных и затем разрушив их.Мы можем притвориться, что «серверы» будут запускать веб-сервер, а «клиент» запускает против них «wget».
Соображения
Я использую сценарий конвейера (не декларативный).По сути, мне нужно, чтобы все «серверы» были включены, когда я запускаю клиентскую логику на «клиентском» узле.
Очевидно, последовательные блоки node {} не будут работать, потому что мне нужно, чтобы все подчиненные работали одновременно.Параллель может работать, и я открыт для этого варианта, но, похоже, его будет сложно отлаживать.
Мое решение
Итак, вот что я придумала до сих пор.Это упрощенный пример, может быть логика после закрытия каждого узла (настройка каждого сервера) и ближе к концу каждого закрытия узла (очистка каждого сервера), или это можетвсе должно быть сделано клиентом, на самом деле не имеет значения.
def allocatedServerList = []
// Allocate 3 "servers" and then 1 client. Keep servers allocated.
node {
allocatedServerList << env.NODE_NAME
node {
allocatedServerList << env.NODE_NAME
node {
allocatedServerList << env.NODE_NAME
node {
//this is the client
sh "run some client work against ${allocatedServerList}"
//eg: ssh to each server, start some service, pound it for a while, shut them down
}
}
}
}
Удивительно, но это прекрасно работает.
Кто-нибудь может предложить лучший подход ?Недостаток вложенного кода в том, что вы не можете легко изменить количество узлов (без рекурсивных методов, которые делают его нечитаемым)