web-dev-qa-db-fra.com

Comment obtenir une liste de tous les noeuds Jenkins avec une étiquette incluant le noeud principal?

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
}
5
Patrick B.

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.

4
Patrick B.

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 }

1
k4cy

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.

0
Russell Gallop

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.

0
kirkpatt