是否可以通过系统Groovy脚本获取Jenkins中的RUNNING构建的列表?我尝试遍历繁忙的执行程序,但是从执行程序对象中,我无法获得构建对象:
def busyExecutors = Jenkins.instance.computers .collect { c -> c.executors.findAll { it.isBusy() } } .flatten() // reminder: transforms list(list(executor)) into list(executor) busyExecutors.each { e -> println('=====print out methods of executor object======='); println e.metaClass.methods*.name.sort().unique(); }
我也可以像这样定位我感兴趣的工作:
def item = hudson.model.Hudson.instance.getItem("my_job"); println item.metaClass.methods*.name.sort().unique();
但是然后我将不得不遍历100多个(如果不是更多的话)构建,并询问每个构建是否正在运行。
必须有一种更容易/更好的方法来获取正在运行的构建列表。
关于如何通过System Groovy脚本(我写了其中的一些内容)执行各种操作的信息很多,但是我无法弄清楚如何获取正在运行的构建的列表:
您的问题含糊。有两种方法可以运行groovy脚本。.在控制台上运行Groovy的Groovy插件(.... / script)
以下是使用groovy控制台列出作业节点的信息
def item = hudson.model.Hudson.instance.getItem("createAndPublishSnapshot") def build = item.getLastBuild() println build.isInProgress() println build.getBuiltOn().getNodeName()
https://wiki.jenkins- ci.org/display/JENKINS/Jenkins+Script+Console
https://gist.github.com/dnozay/e7afcf7a7dd8f73a4e05
我发现了几种不使用REST API或解析XML的方法:
runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) }
假设您尚未删除或修改Jenkins中的默认“全部”视图。当然,如果您确切知道构建将位于哪个视图中,则可以用其他视图名称代替。或者您可以尝试以下方法:
runningBuilds = Jenkins.instance.getItems().collect { job-> job.builds.findAll { it.getResult().equals(null) } }.flatten()
尽管此方法不需要视图名称,但它也有局限性。它不会下降到文件夹或多分支管道或类似的东西中。您需要手动下移到文件夹中,或者使用某种方法自动完成。例如,以下是适用于多分支管道的版本:
Jenkins.instance.getItemByFullName(multibranchPipelineProjectName).getItems().each { repository-> repository.getItems().each { branch-> branch.builds.each { build-> if (build.getResult().equals(null)) { // do stuff here ... } } } }
我认为可能有一种比build.getResult().equals(null)确定构建是否正在运行更准确的方法,但是我很难找到好的API文档,因此我不确定。这只是我发现使用对象自省的第一种方法。
build.getResult().equals(null)
再次由于缺少API文档,我不确定在Jenkins.instance.getItems()此使用的内容与Jenkins.instance.getAllItems()在此答案中使用的内容之间是否存在显着差异。
Jenkins.instance.getItems()
Jenkins.instance.getAllItems()
最后,请注意,这些都是效率相对较低的方法。它们会遍历每个作业的每个版本,因此,如果您保存很长的版本历史记录(默认设置是每个作业仅保存10个版本历史记录)或具有数千个作业,则可能需要一段时间才能运行。