【问题标题】:Jenkins Gerrit-Trigger plugin: How to start build for each push instead of each commitJenkins Gerrit-Trigger 插件:如何为每次推送而不是每次提交开始构建
【发布时间】:2015-11-06 09:38:37
【问题描述】:

我们正在为 CI 使用 Jenkins、GerritTrigger 设置,尽管所有提交都来自单次推送,但它将为每次提交开始构建。由于所有更改都相互依赖,因此足以生成包含所有更改的单个构建,但我在 GerritTrigger 插件中看不到该选项。

我相信很多公司都在使用 Jenkins 和 Gerrit 的组合,我很想知道他们是如何处理这些案例的。

例子:

如果开发人员一次将低于 4 个提交推送到 gerrit,它将在 gerrit 中相应地创建 4 个更改,例如 1、2、3、4,并且它会在 jenkins 中为所有提交启动 4 个构建

git log --oneline

e3dfdwd CommitD
5fgfdgh CommitC
df34dsf CommitB
a23sdr3 CommitA 

这里 4 个提交作为一个整体将通过 jenkins 中的所有测试,但单独它们将失败。现在 jenkins 构建对于 A、B、C 将失败,并且对于 D 将成功,因为它将检查 A、B、C,因为它们是它的依赖项。

在这种情况下,虽然 Commit-D 是成功的,但它不能被合并,因为它的依赖项没有在 Jenkins 中传递。

从开发来看,期望每次推送而不是每次提交都进行 jenkins 验证似乎是合理的。但是 GerritTrigger 只能在每次提交时运行。

问题:

有没有办法通知 jenkins 只为 commit-D 开始构建,因为它将具有所有依赖项 C、B、A ? 或者我们可以从开发而不是提交为每个 git push 开始构建吗?

抱歉,如果我有任何信息

【问题讨论】:

  • 请解释为什么开发人员要同时推送 4 个提交,或者如果没有理由,则通过压缩它们来避免它
  • 一次推送四个提交是非常合理的,但是有不可构建的中间提交似乎是非常错误的。
  • 是的 MagnusBack 你是对的,我们必须在这种方法中对不可构建的中间提交做出妥协。但是根据我们的工作场景,这似乎是合理的,并且它大大减少了我们的资源消耗,而不是进行 4 次构建,而只会进行 1 次构建。
  • 它将确保整个代码库始终是可构建和验证的,但不是每次提交。我们对此很好,并且在我们的团队中没有发现任何问题。

标签: jenkins jenkins-plugins gerrit


【解决方案1】:

我找到了一种只为 commit-D 开始构建的方法。

我介绍了一个 gerrittrigger 作业,它在每次提交后立即运行,该作业不会进行任何克隆/构建/验证。

它只会做一些验证,比如检查给定的更改是否需要 - 通过更改、依赖项是否存在以及对同一分支的依赖项等

此作业将触发另一个主要作业,该作业仅针对通过所有验证的更改进行真正的克隆、签出更改、构建、验证等。

因此,这将始终为最高提交启动作业,并根据作业结果批准/拒绝所有相关更改。

虽然它有一些限制,但我们发现这种方法适合我们的工作流程

【讨论】:

    【解决方案2】:

    大多数公司不使用 git 和 gerrit :) 不幸的是,大多数公司甚至不使用 git。而大多数这样做的人,不要使用gerrit。咨询过几十家公司:两家用git,都没有听说过gerrit。

    我认为让 gerrit 将推送视为提交是不可能的。由于推送中的每个提交都可以单独审查和拒绝,因此必须单独考虑和构建每个提交。如果您不希望它以这种方式工作,gerrit 可能不适合您。

    相反,您应该先在本地压缩相关提交,然后再将它们推送到 gerrit。这将达到预期的结果。

    【讨论】:

    • 感谢 Paul 您的快速回复。是的,不幸的是,没有多少公司使用gerrit。我曾在大型 Android 项目中积极使用 gerrit,我被它的酷炫所吸引。这让我开始在当前项目中使用 gerrit。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多