【问题标题】:How to retrieve downstream job build details in a Jenkins pipeline如何在 Jenkins 管道中检索下游作业构建详细信息
【发布时间】:2017-11-02 11:28:32
【问题描述】:

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

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

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

我遇到了许多类似的问题和unanswered duplicate question 但没有运气,有人可以在这里帮助我吗?

【问题讨论】:

  • 您想检索下游构建详细信息但不想将任何方法列入白名单吗?这是不可能的。你必须批准Run#getEnvironment()。

标签: jenkins-pipeline


【解决方案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 相关)。

【讨论】:

  • 我一直在寻找这个,发现有点像你发现的:下游发现是难以捉摸的。我有一个类似的 Groovy 解决方案来发现上游 hudson.model.Hudson.instance.getItem('my_job').getLastBuild().getCauses().each{ it.getUpstreamRun() },但即便如此,将其映射到顶级工作也是相当大的工作。
猜你喜欢
  • 1970-01-01
  • 2021-02-11
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多