groovy 如何列出所选项目的jenkins奴隶

vql8enpb  于 6个月前  发布在  Jenkins
关注(0)|答案(3)|浏览(59)

例如,我想列出在“Foo”作业中定义的从机:Project_Foo1,Project_Foo2等。

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

字符串
我可以列出项目名称,但如何获得奴隶的名字?

rkue9o1l

rkue9o1l1#

一些时髦的方式

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
}

字符串

xeufq47z

xeufq47z2#

在FindAll闭包中,job变量应该包含一个TopLevelItem示例(根据javadoc)。
因此,您需要做的就是job.allJobs获取子作业的集合(javadoc),然后获取它的getName()方法。
最后,

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

字符串
应该可以工作,但我没有Jenkins示例来测试它。

wribegjk

wribegjk3#

可以通过getAssignedLabel()得到项目的标签表达式,通过Label的getNodes()得到满足标签表达式的节点。

def matchedJobs = Jenkins.instance.items.findAll { job ->
  if(job.name =~ /Foo/) {
    for(Node node : job.getAssignedLabel().getNodes()) {
      println node.getNodeName()
    }
  }
}

字符串
getNodeName()返回空字符串,如果它是master。
http://javadoc.jenkins-ci.org/hudson/model/AbstractProject.html#getAssignedLabel()http://javadoc.jenkins.io/hudson/model/Label.html#getNodeName()http://javadoc.jenkins.io/hudson/model/Node.html#getNodeName()

相关问题