如何列出选定项目的jenkins从属项

如何列出选定项目的jenkins从属项,jenkins,groovy,jenkins-slave,Jenkins,Groovy,Jenkins Slave,例如,我想列出在“Foo”作业中定义的从属项:Project\u Foo1、Project\u Foo2等 def matchedJobs = Jenkins.instance.items.findAll { job -> job.name =~ /Foo/ } 我可以列出项目名称,但如何获取从属名称?在FindAll闭包中,您的作业变量应包含一个TopLevelItem实例(根据) 因此,您需要做的就是job.allJobs来获取子jobs()的集合,然后是它的getName(

例如,我想列出在“Foo”作业中定义的从属项:Project\u Foo1、Project\u Foo2等

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

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

在FindAll闭包中,您的
作业
变量应包含一个
TopLevelItem
实例(根据)

因此,您需要做的就是
job.allJobs
来获取子jobs()的集合,然后是它的
getName()
方法

最后,类似于

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

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

您可以通过
getAssignedLabel()
获得项目的标签表达式。 并通过标签的
getNodes()
获取满足标签表达式的节点

def matchedJobs = Jenkins.instance.items.findAll { job ->
  if(job.name =~ /Foo/) {
    for(Node node : job.getAssignedLabel().getNodes()) {
      println node.getNodeName()
    }
  }
}
getNodeName()
如果是主字符串,则返回空字符串

一些常规方法

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
}

您的意思是通过设置标签表达式来限制项目可以运行的位置,并且希望在可以运行项目的位置获得可能的从机?@arasio是的(我没有使用标签-每个作业都有专用的从机)。现在我想看到这些项目中使用的从属设备。我已经打印了项目名称,我需要在这些项目中定义从属设备名称。配置的从属设备是否列在
匹配作业中。allJobs*.properties
?正是我要找的!谢谢