gpt4 book ai didi

git - 如何在 Jenkins 中一次只远程触发一个构建?

转载 作者:太空狗 更新时间:2023-10-29 14:17:36 27 4
gpt4 key购买 nike

这是 How to configure Git post commit hook 的扩展或变体

我遇到的问题是我希望每次提交一个构建。相反,我想要的是一次触发构建的单个实例。当该单个实例正在运行时,新请求可能会累积,但一旦当前构建完成,它们应该 merge 到一个新构建中。

显然,触发应该发生在有意义相关的 git 修订上,通常来自同一个分支,并且构建应该始终在最接近 HEAD 的触发修订上执行(这有意义吗?)。

所以,为了这个问题,假设每个人都在 push 掌握,我放置了一个 git 钩子(Hook)来触发构建。我如何才能将待处理的请求 merge 为一个请求,而不是作为单独的构建排队?

这种行为可以通过轮询轻松配置,但出于各种不相关的原因(大量作业 + 需要轮询单个作业消耗的多个存储库)我不想使用轮询。

Jenkins parameterized job that only queues one build 提供了一种可能性:使用“启动器”作业,它可以快速终止并使用“组合排队的 git 哈希”启动实际工作作业。这种方法的问题是启动器作业需要在启动工作作业之前检查存储库。鉴于大型 git 存储库,这会引入 Not Acceptable 延迟。

最佳答案

您是否需要通过 git hooks 触发构建?

因为如果没有,您可以很容易地获得所需的行为,将您的作业触发器更改为具有适当超时的存储库轮询。假设五分钟,这为这些新修订提供了足够的时间来叠加并立即构建。

您也可以使用 Throttle Concurrent Builds plugin并添加避免并发构建的约束。

编辑:还可以选择保留 git 钩子(Hook)但添加 Quiet Period。 .这是 Jenkins 的核心功能,可通过管理 Jenkins 部分访问。

编辑 2:当我读到你的新评论时,我想到了 Parametrized Scheduler Plugin并添加一个参数来指定存储库 URL,但这不是轮询它定期安排构建的更改,这不是您想要的。

根据新要求,我会做一些听起来有点像 Jerry Rig 的事情:我会创建另一个名为 your-project-executor 的工作,这个人会定期(每 2 分钟左右)构建并运行一个 shell 脚本,该脚本会有一个很大的 if-else block ,这将是 git fetch 和检查不同预定义存储库中的更改,如果给定存储库有更改,那么这将使用所需参数(REPO_URL 等)触发您当前的作业。

要检查更改,您可以将 HEAD 当前修订散列存储在执行程序作业工作区的属性文件中,然后将其与 git rev-parse HEAD 的输出进行比较。

编辑 3:设置构建速率的示例: enter image description here这会每小时消耗一次您的队列。

关于git - 如何在 Jenkins 中一次只远程触发一个构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39841026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com