【问题标题】:Making Jenkins (Hudson) job depend on another job让詹金斯(哈德森)的工作依赖于另一份工作
【发布时间】:2011-02-10 02:16:35
【问题描述】:

我有两份工作:

  1. 上传
  2. 启动实例

我想让 Launch-instance 依赖于另一个,以便触发 Launch-instance 自动导致 Upload 首先运行.

我可以使用内置的 Jenkins 功能或插件来实现这一点吗?

请注意,我确实希望 Upload 总是触发 Launch-instance,这就是“在构建其他项目之后构建” Launch-instance 上的选项可以。我想要的是更类似于depends 属性在Ant 中的工作方式

【问题讨论】:

  • 注意:您可以用“A”和“B”替换作业名称,而不会丢失相关信息。 :)
  • Upload and Launch-Instance 实际上让我更清楚这个问题。

标签: hudson build-automation jenkins


【解决方案1】:

你试过Parametrized Trigger Plugin吗?

您可以将其用作构建步骤,并选中“阻止直到触发的项目完成构建”复选框。这应该正是您正在寻找的。​​p>

【讨论】:

  • 谢谢!我现在没有时间(或不需要)试用该插件,但是是的,这看起来是个不错的方法。
  • 这正是我想要的。谢谢!
  • 我已经安装了这个插件,但是“构建步骤”菜单中的“触发/调用其他项目的构建”选项不存在。
【解决方案2】:

啊哈,找到了!在这里,我建立在 miki's answer 的基础上,它为我指明了方向,但并没有完全解决这个问题。

正如 Spanish-language article about launching Hudson builds 中所说,该链接来自 Hudson 的 Remote access API page 的 cmets,miki 链接到:

En la sección "构建触发器" [...] marcamos la opción "触发器远程构建(例如, 来自脚本)”。Al marcar esta opción vemos como aparece el cuadro de texto “Authentication Token”。Aquí potremos el nombre del token de autenticación。


(来源:adictosaltrabajo.com

(似乎了解西班牙语的好处开始显现... :-)

因此,Hudson 提供了一个方便的内置选项来远程触发构建。在 Build Triggers 部分(在我的例子中是 Upload 作业),您可以启用远程构建 并设置身份验证令牌(参见上面的屏幕截图)。然后,您可以通过访问包含该令牌的特定 URL 来启动构建。就我而言,Launch-instance 的第一个构建步骤如下所示:

wget http://[hudson-url]/job/Upload/build?token=TEST
sleep 10

即使匿名构建被禁用并且简单地尝试访问构建 URL 会产生“403 Forbidden”,这仍然有效。

【讨论】:

    【解决方案3】:

    通过 wget 运行依赖作业不是一个通用的解决方案。由于作业是异步运行的,因此您的 Launch-job 不会挂起并等待 Upload 作业完成。使用睡眠只是一个肮脏的黑客,在大多数情况下不是一个选择...... 恕我直言,最好的解决方案是使用:http://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin

    【讨论】:

      【解决方案4】:

      如何通过调用build URL 来构建上传,并使用 wget 作为第一个构建步骤?然后添加 Launch-instance 的牛肉构建步骤。

      或者对于更高级的方法,也许使用Remote access API

      【讨论】:

      • +1 引导我走向正确的道路!在我们的案例中,简单地访问构建 URL 是行不通的,因为匿名构建被禁用。但我从“远程访问 API”页面的 cmets 中发布的链接 Alejandro Pérez García 中找到了关键建议。 :-) 我将详细信息放在单独的答案中:stackoverflow.com/questions/2674468/…
      • 我想接受这个答案是最公平的。 (请记住在启用安全性时在作业配置中查看构建触发器 -> 远程触发器构建;我的答案中有详细信息。)
      • 这似乎是一个非常糟糕的主意,我不会向其他用户推荐这个解决方案,尽管它确实有效。以下其他解决方案获得更多投票。
      【解决方案5】:

      您可以使用下游或上游依赖项。您应该使用“构建触发器”-> 在项目的配置部分构建其他项目和/或构建后操作之后构建。

      【讨论】:

      • 您必须在“更新”项目中添加“Build-Trigger”-> Build after 并在此处输入“Launch-instance”。
      • 抱歉,您似乎没有阅读整个问题...它说我确实希望 上传 始终触发 Launch-instance(但是当 Lau​​nch-instance 运行时,Upload 应该先运行)。
      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2011-08-14
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多