一尘不染

如何获取所有分配了标签的Jenkins节点(包括主节点)的列表?

jenkins

我正在创建Jenkins管道作业,并且需要在所有带有特定标签的节点上运行作业。

因此,我试图获取分配有特定标签的节点名称的列表。(有了一个节点,我可以使用来获得标签getAssignedLabels()

中的nodes-list jenkins.model.Jenkins.instance.nodes似乎不包含我需要包含在搜索中的主节点。

我当前的解决方案是遍历-
jenkins.model.Jenkins.instance.computers并使用getNode()-method获取节点。这行得通,但是在Jenkins的javadoc中,我正在阅读此列表,可能不是最新的。

从长远来看,我将(动态地)添加云节点,恐怕届时我将无法使用computers

正确获取所有当前节点的列表是什么?

这就是我现在正在做的:

@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
}

阅读 532

收藏
2020-07-25

共1个答案

一尘不染

这就是我现在正在做的方式。我还没有发现其他东西:

@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 包含主节点和所有从节点。

2020-07-25