【问题标题】:How to force Jenkins to build dependencies first如何强制 Jenkins 先建立依赖
【发布时间】:2018-01-30 09:28:29
【问题描述】:

我们有很多 Maven Jenkins 项目,其中一些依赖于其他项目。 Jenkins 自动计算上游/下游。

我们可能会遇到这样的情况:

Project A
|_ Project B
   |_Project C

表示A有B作为依赖,B有C作为依赖。

经常发生的情况是,如果我同时将更改推送到 A、B 和 C,A 可能会先开始构建,而没有同时将更改推送到 B 或 C,从而导致构建失败。

最终 B 和 C 将构建并且他们将重新触发 A 的构建,因此 A 将变为绿色,但我想知道是否有办法避免这些临时故障。

我认为quiet time 可以帮助解决这个问题,但看起来这只是在短时间内完成多个推送的情况下不触发同一项目的多个构建有用。相反,我希望它将构建延迟 x 秒,并在结束时分析队列并找出应该首先构建的内容。

Jenkins 中是否有任何内置功能可以帮助解决这种情况?

【问题讨论】:

    标签: maven jenkins


    【解决方案1】:

    我可以给你一个解决办法。
    quiet time 提供为510。现在配置Project A -> Block build when upstream project is building。因此,对于 quiet timeProject A 作业将等待 510 秒。正如您所说,您将同时将更改推送到Project B & C,现在将为这些项目启动构建。现在当Project A 恢复时,由于这个选项Block build when upstream project is building,它不会构建。 Project B & C 之间也是如此。希望这会有所帮助。

    我有另一个解决方案。这也可能对您有所帮助。根据您的要求选择。
    Build after other projects are built 使用此选项并选择Trigger only if build is stable 选项。因此,如果依赖项失败,则不会构建此项目。希望这会有所帮助。

    【讨论】:

    • 看不到Block build when downstream project is building 选项。我只能看到 Block build if certain jobs are running 但这是一个文本区域,您应该在其中手动指定作业,这违背了为 maven 项目提供自动下游发现的目的。
    • 我已经启用了Trigger only if build is stable 选项。问题不在于当依赖项失败时会触发作业,问题在于作业会与依赖项一起触发。就像詹金斯不看队列内容来决定先从哪个开始。
    • Check this image for Block build when downstream project is building
    • 当您设置项目上游/下游方法时,如果您可以在General -> Advanced 下看到Block build when downstream project is building 选项,那么构建将按照我的解决方案停止。希望这会有所帮助。
    • 原来问题与webhooks有关。 git push 触发了在 gitlab 中注册的 webhook,并且该 url 没有指定 delay 查询参数。所有项目都设置了一个安静的时期,但看起来如果一个 webhook 是用一个没有指定延迟的 url 触发的,那么 Jenkins 假设它是 0,所以它会立即开始工作。添加delay=5sec 解决了这个问题。您能否编辑您的回复,建议启用Block build when upstream project is building 而不是Block build when downstream project is building,以便我可以接受您的回答?谢谢
    【解决方案2】:

    我假设您的工作 A、B 和 C 由于推送/提交而被触发。 如何配置一个在推送/提交时触发的包装器作业,该作业将根据完成的提交确定要执行的下游作业以及执行顺序?

    【讨论】:

    • 我真的很想避免添加任何包装作业,因为 Jenkins 应该拥有以正确方式运行的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多