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

1 jenkins-pipeline

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

def INT_JOB=构建作业:'ABC',传播:假,等待:真

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

我遇到了许多类似的问题和一个未回答的重复问题,但没有运气,有人可以在这里帮助我吗?

Leo*_*d K 5

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

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()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

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"
Run Code Online (Sandbox Code Playgroud)

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