需要在 jenkins 中每小时安排一次工作

Aja*_*jay 21 jenkins

我是詹金斯的新手。我有一份工作,我需要每 1 小时安排一次。

我在用

* */1 * * * 
Run Code Online (Sandbox Code Playgroud)

但它没有有效地工作。

请提供任何其他解决方案。

mas*_*oeh 35

詹金斯使用 cron 表达式解释here

要安排每小时,那么你可以把

0 * * * *
Run Code Online (Sandbox Code Playgroud)

然后你的工作将每小时执行一次(07:00、08:00、09:00等等)

更新

作为对原始配置的解释,语法

* */1 * * *
Run Code Online (Sandbox Code Playgroud)

将每分钟执行一次作业。

更新 2

根据评论中的要求,这里的语法每 3 小时安排一次

0 */3 * * *
Run Code Online (Sandbox Code Playgroud)

语法*/n意味着作业将n每小时安排一次


小智 24

詹金斯建议这样:

H * * * *
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的优点是 jenkins 将管理队列中的任务。也许其他人已经有了答案,但它仍然有用。如果有用,为什么要这么苛刻?20个赞的答案不太好....呸 (5认同)
  • 与 1 岁以上问题的其他答案相同。 (2认同)

der*_*ugo 12

我知道这是一个旧线程,但我正在回答,因为显然人们仍然在这里登陆。

不应再使用最佳答案

詹金斯引入了一个值H

该字段遵循 cron 的语法(略有不同)。具体来说,每行由 5 个字段组成,由 TAB 或空格分隔:

分钟 小时 DOM 月 DOW

  • MINUTE 一小时内的分钟数 (0–59)
  • HOUR 一天中的小时 (0–23)
  • DOM 一个月中的第几天 (1–31)
  • MONTH 月份 (1–12)
  • DOW 星期几 (0–7),其中 0 和 7 是星期日。

要为一个字段指定多个值,可以使用以下运算符。按照优先顺序,

  • * 指定所有有效值
  • M-N 指定值范围
  • M-N/X*/X在指定范围或整个有效范围内按 X 的间隔步进
  • A,B,...,Z 枚举多个值

为了允许定期调度的任务在系统上产生均匀的负载,应尽可能使用符号 H(代表“散列”)。例如,将 0 0 * * * 用于十几个日常工作将导致午夜出现大峰值。相比之下,使用 HH * * * 仍然会每天执行一次每个作业,但不是同时执行,最好使用有限的资源。

H 符号可用于范围。例如,HH(0-7) * * * 表示 12:00 AM(午夜)到 7:59 AM 之间的某个时间。您还可以使用带有或不带范围的 H 的步进间隔。

H 符号可以被认为是一个范围内的随机值,但它实际上是作业名称的散列,而不是随机函数,因此该值对于任何给定的项目都保持稳定。

请注意,对于月份字段,由于月份长度可变,*/3 或 H/3 等短周期在大多数月份即将结束时不会始终如一地工作。例如,*/3 将在一个月的第 1、4、…31 天运行,然后在下个月的第二天再次运行。哈希值始终在 1-28 范围内选择,因此 H/3 将在月末运行 3 到 6 天之间产生间隔。(更长的周期也会有不一致的长度,但效果可能相对不那么明显。)

所以每小时建造一次的正确答案是

H * * * *
Run Code Online (Sandbox Code Playgroud)

每 3 小时

H H/3 * * *
Run Code Online (Sandbox Code Playgroud)

*和之间的区别H也可以解释为

  • *翻译成每个
  • H翻译成任何

所以例如

* * * * *
Run Code Online (Sandbox Code Playgroud)

转化为:每分钟、每小时、每月的每一天、每个月都在构建,无论是星期几。

H * * * *
Run Code Online (Sandbox Code Playgroud)

转换为:每小时构建一次(x),无论它是哪一分钟(可以是 x:00 和 x:59 之间的任何分钟)

H H * * *
Run Code Online (Sandbox Code Playgroud)

转换为:每天构建一次,无论什么时间(可以是 00:00 和 23:59 之间的任何分钟和任何小时)


您应该更喜欢使用H而不是硬编码的时间值的原因也如前所述

如果您配置了 100 个作业

0 0 * * *
Run Code Online (Sandbox Code Playgroud)

它们都将尝试同时启动,例如导致大量轮询并在午夜拉动流量。

如果您将它们全部配置为

H H * * *
Run Code Online (Sandbox Code Playgroud)

它们都将每天构建一次,但不是同时构建,而是在一天内分布。


安排时间范围

您可以比使用时间范围更好地计划日程安排,例如

H H(18-23) * * *
Run Code Online (Sandbox Code Playgroud)

所有作业将在每天 18:00 到 23:59 之间的任何时间构建。


计划时间范围跨越午夜

甚至还可以安排跨越午夜的作业,例如在晚上 19​​:00 到早上 5:00 之间构建。

但是由于 cron 通常不允许这样做,您可以使用使用 shiftet 时区的技巧。

例如,我住在 GMT+1 时区 MEZ,我想在晚上 19​​:00 到凌晨 5:00 之间建立所有工作。为了做到这一点,我使用 5 小时将我的完整时区移动

TZ=Etc/GMT+6
Run Code Online (Sandbox Code Playgroud)

比我使用 shiftet 范围从 14:00 (-> +5 = 19:00pm) 开始到 23:59 (-> +5 = 4:59am) 结束

H H(14-23) * * *
Run Code Online (Sandbox Code Playgroud)