如何列出所选项目的詹金斯奴隶

How to list jenkins slaves of selected projects

例如,我想列出 "Foo" 作业中定义的从属:Project_Foo1、Project_Foo2 等...

def matchedJobs = Jenkins.instance.items.findAll { job ->
    job.name =~ /Foo/
}

我可以列出项目名称,但是如何获取从名称?

在 FindAll 闭包中,您的 job 变量应该包含一个 TopLevelItem 实例(根据 javadoc)。

因此,您所要做的就是 job.allJobs 获取子作业 (javadoc) 的集合,然后获取其 getName() 方法。

最后,类似

def matchedJobs = Jenkins.instance.items.findAll { job ->
  job.name =~ /Foo/
}
def childrenJobNames = matchedJobs.allJobs*.name

应该可以,但我没有 Jenkins 实例来测试它。

您可以通过getAssignedLabel()获取项目的标签表达式。 并通过getNodes() of Label.

获取满足label表达式的节点
def matchedJobs = Jenkins.instance.items.findAll { job ->
  if(job.name =~ /Foo/) {
    for(Node node : job.getAssignedLabel().getNodes()) {
      println node.getNodeName()
    }
  }
}

getNodeName() returns 如果是 master,则为空字符串。

http://javadoc.jenkins-ci.org/hudson/model/AbstractProject.html#getAssignedLabel() http://javadoc.jenkins.io/hudson/model/Label.html#getNodes() http://javadoc.jenkins.io/hudson/model/Node.html#getNodeName()

一些groovy方式

def matchedJobs = Jenkins.instance.items.findAll{ job -> 
  job.name =~ /test/ && job.getAssignedLabel() != null 
}.collect { job ->
      "${job.name}: ${job.getAssignedLabel().getNodes().collect({it.getNodeName()==""?"master":it.getNodeName()}).join(',')}\n" 
}.each { slaves ->
    println slaves
}