从Jenkins API获取实际内部版本号

bnlyeluc  于 2022-10-06  发布在  Jenkins
关注(0)|答案(1)|浏览(260)

我尝试选择所有当前正在运行的进程,以使正在运行的管道的BuildNumberJobName最终有可能杀死它们。但是,如果我使用Jenkins API来收集BuildNumberJobName,我将得到返回值:

[(master)]:
[org.jenkinsci.plugins.workflow.job.WorkflowJob@6b41187c[myPipeline], org.jenkinsci.plugins.workflow.job.WorkflowJob@6296243a[myDeploy]]

我假设“@6296243a[myDeploy]”是我需要的信息。但“6296243a”不是有效的BuildNumber。我真的不知道这个数字代表什么。可能是进程ID。“myDeploy”是我需要的JobName

那么我的问题是,为什么我不能在这里获得有效的“BuildNumber”呢?

import jenkins.model.*
import hudson.model.*

def result = []

def buildingJobs = Jenkins.instance.getAllItems(Job.class).findAll { 
  it.isBuilding()
}

println buildingJobs

最后,我想在以下位置使用这两个信息:

Jenkins.instance
 .getItemByFullName(<JobName>)
 .getBuildByNumber(<BuldNumber>)
 .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

如果我在这里使用值BuildNumber: 6296243a``JobName: myDeploy,它将不起作用。如果我在视图(2357)中使用BuildNumber,它工作得很好。

那么,有谁能提示一下如何接收真正的BuildNumber呢?

of1yzvn4

of1yzvn41#

在您提供的示例代码中,buildingJobs将拥有一个WorkflowJob对象列表。因此,当您打印它时,您将获得对对象的引用。

下面是如何获取当前运行和暂停的构建的构建ID和作业名称。

Jenkins.instance.getAllItems(Job.class).findAll{it.isBuilding()}.each { job ->
      job.getBuilds().each { b ->        
        if(b.isInProgress()) {
            println "Build: " + b.getNumber() + " of Job: " +  job.getName() + " is Running. Hence Killing!!!"
        } 
   }  
}

相关问题