如何遍历节点以在Jenkins Pipeline中运行命令

时间:2019-04-16 19:17:34

标签: jenkins jenkins-pipeline

我试图遍历列表计算机并在相应节点上运行命令。问题是,每当我运行它时,我都会收到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 :(得分:0)

这是一个在具有特定标签的所有节点上运行shell命令的示例。 我正在执行“ uname -a”,而不是回显“ 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")
        }
    }
}