Je crée un travail de pipeline Jenkins et je dois exécuter un travail sur tous les nœuds portant une étiquette.
Par conséquent, j'essaie d'obtenir une liste de noms de nœuds affectés d'une certaine étiquette. (Avec un nœud, je peux obtenir les étiquettes avec getAssignedLabels()
)
La liste nodes
- dans jenkins.model.Jenkins.instance.nodes
ne semble pas contenir le noeud principal que je dois inclure dans ma recherche.
Ma solution actuelle consiste à parcourir le jenkins.model.Jenkins.instance.computers
et à utiliser la méthode getNode()
- pour obtenir le nœud. Cela fonctionne, mais dans le javadoc de Jenkins, je lis que cette liste peut ne pas être à jour.
À long terme, j'ajouterai (de manière dynamique) des nœuds de cloud et je crains de ne pouvoir utiliser computers
alors.
Quel est le bon obtenir la liste de tous les nœuds actuels?
C'est ce que je fais en ce moment:
@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
}
C'est ce que je fais maintenant. Je n'ai pas trouvé autre chose:
@NonCPS
def hostNames(label) {
def nodes = []
jenkins.model.Jenkins.instance.computers.each { c ->
if (c.node.labelString.contains(label)) {
nodes.add(c.node.selfLabel.name)
}
}
return nodes
}
jenkins.model.Jenkins.instance.computers
contient le nœud maître et tous les esclaves.
Mise à jour vers @ patrick-b answer: contient peut être un buggy si vous avez des étiquettes contenant la même chaîne, j'ai ajouté une étape divisée, vérifiez chaque étiquette séparée par des espaces
@NonCPS
def hostNames(label) {
def nodes = []
jenkins.model.Jenkins.instance.computers.each { c ->
c.node.labelString.split(' ').each { l ->
if (l != null && l.equals(label)) {
nodes.add(c.node.selfLabel.name)
}
}
}
return nodes
}
Je pense que vous pouvez le faire avec:
def nodes = Jenkins.instance.getLabel('my-label').getNodes()
for (int i = 0; i < nodes.size(); i++) {
node(nodes[i].getNodeName()) {
// on node
}
}
Je ne sais pas avec certitude si cela fonctionne avec les nœuds de cloud.
Essayez d’utiliser for (aSlave in hudson.model.Hudson.instance.slaves) {}
et aSlave.getLabelString());
pour obtenir toutes les étiquettes de tous vos nœuds. Vous pouvez créer une liste de nœuds par étiquette de cette façon.