たとえば、「Foo」ジョブで定義されているスレーブを一覧表示したい: Project_Foo1、Project_Foo2 など...
def matchedJobs = Jenkins.instance.items.findAll { job ->
job.name =~ /Foo/
}
プロジェクト名を一覧表示できますが、スレーブ名を取得するにはどうすればよいですか?
たとえば、「Foo」ジョブで定義されているスレーブを一覧表示したい: Project_Foo1、Project_Foo2 など...
def matchedJobs = Jenkins.instance.items.findAll { job ->
job.name =~ /Foo/
}
プロジェクト名を一覧表示できますが、スレーブ名を取得するにはどうすればよいですか?
いくつかのグルーヴィーな方法
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
}
でプロジェクトのラベル式を取得できます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()
FindAll クロージャーでは、job
変数はTopLevelItem
インスタンスを保持する必要があります ( javadocに従って)。
したがってjob.allJobs
、子ジョブのコレクション ( javadoc ) を取得してから、そのgetName()
メソッドを取得するだけです。
最後に、次のようなもの
def matchedJobs = Jenkins.instance.items.findAll { job ->
job.name =~ /Foo/
}
def childrenJobNames = matchedJobs.allJobs*.name
動作するはずですが、テストするための Jenkins インスタンスがありません。