我能否将Jenkins的SCM轮询间隔随机化?

16
在大多数Jenkins的示例中,SCM轮询值被指定为*/15 * * * *,即每15分钟轮询一次SCM。 当你有数百个作业时,这样做很好,但当你有数千个作业时,就会导致在每小时的15、30、45和0分钟向SCM(在本例中为Subversion)服务器发送成千上万的请求。
是否有一种方法可以在Jenkins中随机化轮询值以避免上述情况?
在Jenkins主配置屏幕上有一个值最大并发轮询数。应该设置它(并将其设置为什么值)以避免上述情况?

与问题相关的最新补充:Jenkins允许您限制轮询SCM的工作人员数量。这将解决您的问题,无需随机化。请参见http://jenkins-ci.361315.n4.nabble.com/of-Executors-affect-polling-too-td3622606.html。 - Omri Spector
4个回答

29
使用 H 替代 *,Jenkins 将会随机分配轮询时间。需要注意的是,目前还没有找到针对除每小时/每天等频率以外的好语法,因此:
H * * * *
将会在预设的随机分钟进行每小时一次的轮询。
H H * * *
将会在预设的随机小时和分钟进行每天一次的轮询。
H H H * *
将会每周进行一次轮询。
0 H * * *
将会在整点进行轮询,但只会在预设的随机小时进行每天一次的轮询。
请注意,你可以拥有多个 cron 行,且任何一个都会匹配,因此,在一个好的子小时频率语法已被确定之前,您可以使用类似以下内容(每小时最多6次,平均约15分钟):
H * * * *
H * * * *
H * * * *
H * * * *
H * * * *
H * * * *
如果您对在小时内分配语法有好的建议,请回复此线程:

https://groups.google.com/forum/?fromgroups#!jenkinsci-users/VghEjfygWuw/PuIG1o7u1GQJ%5B1-25%5D

更新 (2013年4月)

Jenkins 1.510 及更高版本包括新语法,允许指定小时内的分布。


+1 为 1.510 更新。最新的 LTS 版本是 1.509.1,有点遗憾。这几乎足以成为升级到非 LTS 版本的理由。 - Snekse

2
如果您将最大并发轮询次数设置为1到3之间的某个值,则轮询请求将简单地排队并按顺序进行处理(或最多并行处理3个)。
考虑到SVN轮询所涉及的全部内容实际上都是
svn info branch-url
它们应该很快就能完成,但至少您已经限制了并行请求。

1

@Stephen Connolly的解决方案可能是这个问题的好解决方案。

如果你真的有成千上万个工作要担心,考虑根据作业名称的某个部分设置定时(假设你的作业名称合理分布)。

例如,如果你的作业以'B'开头,将时间设置为*/2。如果它以'C'开头,则将其设置为*/3等('A'需要除1之外的其他东西)。

这不是一个完美的解决方案,但如果你真的想管理那么多的工作,它可能是一个权宜之计,直到你找到更好的解决方案。


/2 每小时运行两次,/3 每小时运行三次... 我怀疑您的语法顺序有误,您想要的是 - Stephen Connolly
@StephenConnolly 这是不正确的;*/x 表示作业之间将有 x 单位的时间间隔。原帖中的理解是正确的:*/15 * * * * 意味着每 15 分钟执行一次,而不是每小时执行 15 次。 - Ed Staub
@edstaub 在手机上使用 SO 的危险 ;) - Stephen Connolly

0

哈 哈 哈 * *

我认为以上内容每月会进行一次轮询,而不是每周。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接