这是How to configure Git post commit hook
的扩展或变体我遇到的问题是我不每次提交需要一次构建。我想要的是一次触发一个构建的单个实例。当该单个实例正在运行时,新请求可能会累积,但在当前构建完成后,它们应合并到一个新构建中。
显然,触发应该是有意义相关的git修订版,通常来自同一个分支,构建应该总是在最接近HEAD的触发修订版上执行(这有意义吗?)。
所以,为了这个问题,假设每个人都在推动掌握,我放置一个git钩子来触发构建。如何使待处理的请求合并为单个请求而不是作为单独的构建排队?
通过使用轮询可以轻松配置此行为,但我不想出于各种不相关的原因(大量作业+需要轮询单个作业消耗的多个回购)来使用轮询。
Jenkins parameterized job that only queues one build提供了一种可能性:使用"启动器"快速终止并通过"组合排队的git哈希"启动实际工作的工作。这种方法的问题在于启动器作业需要在启动工作作业之前检查回购。鉴于git repo很大,这会带来不可接受的延迟。
答案 0 :(得分:1)
您是否需要通过git hooks触发构建?
因为如果没有,您可以轻松地获得所需的行为,将您的作业触发器更改为存储库轮询,并具有适当的超时。 让我们说五分钟,这为这些新版本提供了足够的时间来叠加并立即构建。
此外,您可以使用Throttle Concurrent Builds plugin并添加避免并发构建的约束。
修改强> 除了添加Quiet Period之外,还可以选择保留git钩子。哪个是Jenkins核心功能,可以通过管理Jenkins 部分访问。
<强> EDIT2:强> 当我阅读您的新评论时,我考虑了Parametrized Scheduler Plugin并添加了一个参数来指定存储库URL,但这并不是为了定期修改它的调度而进行轮询,这不是您想要的
根据新的要求,我会做一些听起来有点像Jerry Rig的事情: 我会创建另一个名为 your-project-executor 的工作,这个人会定期构建(每2分钟左右)并运行一个shell脚本,它会有一个很大的if-else块,这将是git fetch和检查不同预定义存储库中的更改,如果给定存储库有更改,那么这将使用所需参数(REPO_URL等等)触发当前作业。
要检查更改,您可以将HEAD当前修订版哈希存储在执行程序作业工作区的属性文件中,然后将其与git rev-parse HEAD
的输出进行比较。