我配置了一个Jenkins项目(这里我将其称为SuperJob ),以便按顺序调用其他几个不同的jenkins项目。
我希望能够通过Jenkins API找出此SuperJob的特定内部版本号的所有子项目的结果
查看发布的代码HERE,我能够从每个构建中获得在SuperJob项目中配置的特定项目的列表,但是我无法找到一种方法来查询这些项目中每个项目的特定构建号是从特定的SuperJob构建中运行的。
例如,我想找出"SuperJob build #5“触发了"MyJob build #3”和"OtherJob build #20“,这样我就可以聚合并检查所有这些结果。
我已经尝试了所有的上行和下行API,包括使用子项目作为关系的参数,但它们都返回空或空。
我猜这是可能的,因为Jenkins本身能够在web ui中显示来自插件的信息,但我还不能找出是如何实现的。
发布于 2016-01-14 16:39:38
我也有同样的问题,目前我用来查找子构建的解决方案是通过解析每个构建的控制台日志。日志包含触发的作业名称和内部版本号(在它们完成后)。
import hudson.console.ConsoleNote;
jenkins = Jenkins.getInstance()
jobName = "root-job-name" //just an example
buildNumber = 123 //just an example
job = jenkins.getItem(jobName)
startBuild = job.getBuildByNumber(buildNumber)
//scanning the tree using BFS
list = []
visitedList = []
q = list as java.util.Queue
q<<startBuild
visitedList.add(startBuild)
while (!q.empty){
node = q.poll()
subjobs = getTriggeredBuildssByBuild(node) //see method bellow
subjobs.each{ subj ->
if (!(subj in visitedList)){
visitedList.add(subj)
q<<subj
}
}
}
//printing results
visitedList.each{
println "Job name and build number: ${it}"
}
//parsing the log of the Run object to get sub builds triggered by it
def getTriggeredBuildssByBuild(def run){
list =[]
if (run != null && ((reader = run.getLogReader()) != null)) {
BufferedReader bufferedReader = new BufferedReader(reader);
for (String line = bufferedReader.readLine();
line != null;
line = bufferedReader.readLine()) {
//strip off jenkins specific encoding
line = ConsoleNote.removeNotes(line);
matcher = line=~/Finished Build : #(\d+) of Job : (.*) with/
if(matcher){
foundJob = matcher[0][2]
foundBuildNum = Integer.parseInt(matcher[0][1])
foundBuild=jenkins.getItem(foundJob).getBuildByNumber(foundBuildNum)
list.add(foundBuild)
}
}
}
return list
}以下是一些注意事项:
发布于 2018-12-07 01:21:38
如果您有Jenkins服务器URL、作业名称和作业编号,则可以将这些值交换为请求,如下所示:
https://<jenkins server URL>/view/all/job/<job name>/<job number>/api/json?pretty=true&tree=actions[triggeredBuilds[number,url,result]]这将为您提供如下的JSON响应:
{
"_class" : "hudson.model.FreeStyleBuild",
"actions" : [
{
"_class" : "hudson.model.CauseAction"
},
{
},
{
"_class" : "hudson.model.ParametersAction"
},
{
},
{
"_class" : "hudson.plugins.git.util.BuildData"
},
{
"_class" : "hudson.plugins.git.GitTagAction"
},
{
},
{
"_class" : "hudson.plugins.parameterizedtrigger.BuildInfoExporterAction",
"triggeredBuilds" : [
{
"_class" : "hudson.model.FreeStyleBuild",
"number" : <subjob number>,
"result" : "SUCCESS",
"url" : "https://<jenkins server URL>/job/<subjob name>/<subjob number>/"
},
{
"_class" : "hudson.model.FreeStyleBuild",
"number" : <subjob number>,
"result" : "SUCCESS",
"url" : "https://<jenkins server URL>/job/<subjob name>/<subjob number>/"
}
]
},
{
},
{
},
{
}
]
}https://stackoverflow.com/questions/33104913
复制相似问题