1

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

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

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

4

3 回答 3

2

一些时髦的方式

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
}
于 2016-10-27T08:24:49.433 回答
0

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

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

最后,像

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

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

于 2016-10-26T14:22:47.103 回答
0

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

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

getNodeName()如果它是主人,则返回空字符串。

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()

于 2016-10-26T14:46:57.577 回答