Issue
I'm creating a Jenkins pipeline job and I need to run a job on all nodes labelled with a certain label.
Therefore I'm trying to get a list of node names assigned with a certain label. (With a node I can get the labels with getAssignedLabels()
)
The nodes
-list in jenkins.model.Jenkins.instance.nodes
seems not contain the master-node which I need to include in my search.
My current solution is to iterate over the jenkins.model.Jenkins.instance.computers
and use the getNode()
-method to get the node. This works, but in the javadoc of Jenkins I'm reading the this list might not be up-to-date.
In the long-run I will add (dynamically) cloud-nodes and I'm afraid that I won't be able to use computers
then.
What is the right way to get the list of all current nodes?
This is what I'm doing right now:
@NonCPS
def nodeNames(label) {
def nodes = []
jenkins.model.Jenkins.instance.computers.each { c ->
if (c.node.labelString.contains(label)) {
nodes.add(c.node.selfLabel.name)
}
}
return nodes
}
Solution
This is the way I'm doing right now. I haven't found something else:
@NonCPS
def hostNames(label) {
def nodes = []
jenkins.model.Jenkins.get.computers.each { c ->
if (c.node.labelString.contains(label)) {
nodes.add(c.node.selfLabel.name)
}
}
return nodes
}
jenkins.model.Jenkins.get.computers
contains the master-node and all the slaves.
Answered By - Patrick B.
Answer Checked By - Senaida (JavaFixing Volunteer)