我有一个名为ABC的下游作业,它是通过管道中的构建作业触发的。我想提取作业ABC的BUILD_URL和BUILD_NUMBER。
def INT_JOB =构建作业:'ABC',传播:false,等待:true
我的环境: 1)我使用脚本化管道语法,而不是声明性语法,因此希望有脚本化管道语法的解决方案。 2)代码在Groovy沙箱中编写和执行。 3)currentBuild.rawBuild因为groovy沙箱限制而对我不起作用。
我经历了许多类似的问题和一个unanswered duplicate question,但没有运气,有人可以帮助我吗?
答案 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相关)。