如何在Jenkins管道中检索下游作业构建详细信息

时间:2017-11-02 11:28:32

标签: jenkins-pipeline

我有一个名为ABC的下游作业,它是通过管道中的构建作业触发的。我想提取作业ABC的BUILD_URL和BUILD_NUMBER。

def INT_JOB =构建作业:'ABC',传播:false,等待:true

我的环境: 1)我使用脚本化管道语法,而不是声明性语法,因此希望有脚本化管道语法的解决方案。 2)代码在Groovy沙箱中编写和执行。 3)currentBuild.rawBuild因为groovy沙箱限制而对我不起作用。

我经历了许多类似的问题和一个unanswered duplicate question,但没有运气,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

面临同样的问题。 目前我有以下解决方案:

for (job in Hudson.instance.getAllItems(hudson.model.Job)) {
  for (run in job.getBuilds()) {
    cause = run.getCause(Cause.UpstreamCause)
    if ((cause) && (cause.pointsTo(mainBuild))) {
      println "Downstream for " + mainBuild.getFullDisplayName() + " is " + run.getFullDisplayName()
    }
  }
}

只要它包含所有作业和所有运行的2个循环,它就需要时间来运行。 所以我正在寻找一种方法来减少这种搜索。会让你知道。

<强> UPD:

最后,我没有找到从父运行对象下游运行的任何有效方法,但设法使用开始时间标准减少搜索迭代:

int i=0;
for (job in Hudson.instance.getAllItems(hudson.model.Job)) {
  laterRuns = job.getBuilds().byTimestamp(mainBuild.getStartTimeInMillis(),System.currentTimeMillis());
  for (run in laterRuns) {
    i++;
    cause = run.getCause(Cause.UpstreamCause)
    if ((cause) && (cause.pointsTo(mainBuild))) {
      println "Downstream for " + mainBuild.getFullDisplayName() + " is " + run.getFullDisplayName()
    }
  }
}
println "Iterations - $i"

这将总迭代次数从12960减少到57(当然,数字仅与我的Jenkins相关)。