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

でプロジェクトのラベル式を取得できますgetAssignedLabel()。そしてgetNodes()Labelのラベル式を満たすノードを取得します。

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 に答える
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 に答える