Как перебирать узлы для запуска команд в Jenkins Pipeline - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь перебрать список компьютеров и выполнить команду, находясь на соответствующем узле.Проблема заключается в том, что всякий раз, когда я запускаю его, я получаю исключение NullPointerException.

В журнале консоли он показывает, что он работает на первом узле в массиве, но не становится дальше этого.

У меня естьпопытался поместить узлы в стадию, но и с этим не повезло.

println computerList //Array of node names to be iterated

@NonCPS
def echo_all(list) {
    list.each { 
    node("${it}"){
        echo "Hello World"
    }
  }
}

echo_all(computerList)

Я ожидаю, что результаты запустят Hello World на каждой из соответствующих машин в массиве.

1 Ответ

0 голосов
/ 16 апреля 2019

Вот пример запуска команды оболочки на всех узлах с определенной меткой. Я делаю "uname -a", а не echo "Hello World", поэтому будет отображаться имя узла.

label = "database_servers"
echo "Will run on hosts with label ${label}"

listOfNodeNames = jenkins.model.Jenkins.instance.nodes.collect {
  node -> node.getLabelString().contains(label) ? node.name : null
}
listOfNodeNames.removeAll(Collections.singleton(null))

for (node_to_run_on in listOfNodeNames) {
    println "Node: " + node_to_run_on
    node ("${node_to_run_on}") {
        stage("Run uname on ${node_to_run_on}") {
            sh ("uname -a")
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...