【问题标题】:How do I schedule jobs in Jenkins?如何在 Jenkins 中安排工作?
【发布时间】:2012-09-10 11:01:37
【问题描述】:

我在 Jenkins 中添加了一个新作业,我想定期安排。

配置作业,我检查了“定期构建”复选框,并在计划文本字段中添加了表达式:

15 13 * * *

但它没有在预定的时间运行。

安排工作的程序是否正确?

作业应该在凌晨 4:20 运行,但它没有运行。

【问题讨论】:

  • 它运行还是不运行?如果我没记错的话,你的 cron 会说“每天 13:15”。是的:我认为这是安排定期构建的正确方法。
  • 也许这会对你有所帮助:en.wikipedia.org/wiki/Cron#CRON_expression - 我看到 Cedric 已经链接了它......也许你应该告诉我们,预期的时间是什么?
  • 作为参考,RHS 上的蓝色问号很好地解释了可能的值
  • 这是一个自动生成的好网页 --> crontab-generator.org

标签: jenkins cron


【解决方案1】:

通过将计划周期设置为15 13 * * *,您可以告诉 Jenkins 在每年的每个月的每天第 13 小时的第 15 分钟安排构建。

Jenkins 使用了cron expression,不同的字段是:

  1. 一小时内的分钟数 (0-59)
  2. HOURS 一天中的小时数 (0-23)
  3. DAYMONTH 一个月中的某一天 (1-31)
  4. MONTH 一年中的月份 (1-12)
  5. DAYWEEK 星期几 (0-7),其中 0 和 7 是星期日

如果您想每 5 分钟安排一次构建,这将完成这项工作:*/5 * * * *

如果你想在每天 8 点安排你的构建,这将完成这项工作:0 8 * * *

对于过去的几个版本(2014),Jenkins 有一个新参数,H(摘自Jenkins code documentation):

为了让定期安排的任务在系统上产生均匀的负载,应尽可能使用符号 H(表示“哈希”)。

例如,将0 0 * * * 用于十几个日常工作将导致午夜出现大幅峰值。相比之下,使用H H * * * 仍会每天执行每个作业一次,但不是同时执行一次,更好地使用有限的资源。

还要注意:

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

More example of using 'H'

【讨论】:

  • 那么如何在每 6 小时后定期构建。 * */6 * * * 会起作用吗?
  • 使用'H/5 * * * *'而不是'*/5 * * * *'来均匀分布负载
  • 令人沮丧的是,我的大脑中似乎有些东西根本无法掌握这些表达方式,而无需不断地参考文档。
  • @SkillM2 不要忘记爱因斯坦的话——“永远不要记住你可以查到的东西。”
  • 感谢您对 H 与哈希相关的解释。我仍然认为这是 Jenkins 作者的一个不幸的命名选择。在这种情况下,他们可能已经猜到每个人都会直觉地将 H 与小时联系起来,并选择其他东西。
【解决方案2】:

格式如下:

分钟 (0-59)、小时 (0-23)、天 (1-31)、月 (1-12)、星期几 (0-6)

可以插入代表单词Hash的字母H来代替任何值。它将根据您的项目名称的哈希码计算参数。

这样如果您同时在构建机器上构建多个项目,比如每天午夜,它们不会同时开始构建执行。每个项目根据其哈希码在不同的分钟开始执行。

您还可以将值指定为介于数字之间,即 H(0,30) 将返回项目的哈希码,其中可能的哈希值为 0-30。

示例:

  1. 周一至周五每天早上 08:30 开始构建:30 08 * * 1-5

  2. 工作日每天构建两次,午餐时间 12:00 和午夜 00:00,周日至周四:00 0,12 * * 0-4

    李>
  3. 每天下午 4:00 之间开始构建。 - 下午 4 点 59 分或 16:00 -16:59 取决于项目哈希:H 16 * * 1-5

  4. 每周六午夜开始构建:@midnight 或午夜开始构建:59 23 * * 6

  5. 每个月的第一天凌晨 2:00 - 02:30:H(0,30) 02 01 * *

【讨论】:

  • 在第 4 个示例中,您在星期六晚上 11:59 pm 开始构建,即午夜前 1 分钟 :) 只是说
【解决方案3】:

Jenkins 允许您设置多次,以换行符分隔。

如果您需要在每天早上 7 点以及每周日下午 4 点构建它,那么下面的效果很好。

H 7 * * *

H 16 * * 0

【讨论】:

  • H(0-0) 6 * * 1(用于在东部时间周一早上 6 点运行),H(0-0) 16 * * 0(在东部时间周日下午 4 点运行)。运行普通的 H 16(不会在 1600 / 4pm 运行),你必须使用 H(0-0) 16 ....
  • @ArunSangal 而不是H(0-0),您可以简单地使用0 使用H 的优势在于,并非所有作业都将尝试完全同时运行,而是尝试获得“下一个可用时间段”
  • 我必须将计划设置为每 2 天早上 7 点执行一次。您能帮我提供计划代码吗?
【解决方案4】:

*/5 * * * * 表示每 5 分钟一次

5 * * * * 表示每小时的第 5 分钟

【讨论】:

    【解决方案5】:

    在 Jenkins 中安排作业的步骤:

    1. 点击职位要求的“配置”
    2. 向下滚动到“构建触发器” - 副标题
    3. 点击定期构建的复选框
    4. 在 Schedule 字段中添加时间表,例如:@midnight

    注意:在 schedule 字段下,可以看到上一次和下一次的日期时间运行。

    Jenkins 还支持预定义的别名来安排构建:

    @hourly@daily@weekly@monthly@midnight

    @hourly --> 每小时开始时构建 --> 0 * * * *

    @daily, @midnight --> 每天午夜构建 --> 0 0 * * *

    @weekly --> 每周日凌晨的午夜构建 --> 0 0 * * 0

    @monthly --> 每月第一天午夜构建 --> 0 0 1 * *

    【讨论】:

    • at-midnight 很酷 :) Jenkins 似乎认识到了很多从 @ 开始的特殊值,包括 @daily。您可以发布最终列表的链接吗?
    • @chrisinmtown,已添加预定义别名列表,希望对您有所帮助:)
    【解决方案6】:

    要每 5 分钟安排一次 cron 作业,您需要像这样定义 cron 设置:

    */5 * * * *
    

    【讨论】:

    • 我想在美国东部标准时间上午 8:00 准确地运行这项工作,所以我构造的 cron 表达式是 - 00 08 * * * 可以吗?
    • 不幸的是它不起作用,在帖子中附上了它的屏幕截图,顺便说一句,我正在用当前的 EST 时间测试它,即凌晨 4:20 的东西..
    • 东部时间与构建服务器上的时区相同吗?
    • 是的,时间是一样的,顺便说一句 */5 * * * * (每 5mts) 效果很好。
    • 要在美国东部标准时间上午 8 点准确运行作业,您必须这样做:H(0-0) 8 * * *
    【解决方案7】:

    试试这个。

    20 4 * * *

    查看下面的截图

    参考网址 - https://www.lenar.io/jenkins-schedule-build-periodically/

    【讨论】:

    • 谢谢。这对我理解 Jenkins 的* 概念很有帮助
    【解决方案8】:

    尝试使用 0 8 * * *。它应该工作

    【讨论】:

      【解决方案9】:

      Jenkins 使用 Cron 格式进行调度。 您可以参考此链接了解更多详情 https://en.wikipedia.org/wiki/Cron。 还有一件事,Jenkins 为我们提供了一个非常有用的预览。请看一下屏幕截图。

      我希望这会有所帮助。谢谢

      【讨论】:

      • 如何应用这些更改?
      【解决方案10】:

      Jenkins 作业调度语法 首先,我们看一下 Jenkins 的作业调度配置。它看起来很像 Linux 的 cron 语法,但你不必熟悉 Linux 命令行就能搞清楚。

      一个调度条目由五个空格分隔的字段组成。您可以通过添加多个条目来多次安排作业。

      截图 每个字段可以包含一个精确值或使用一组特殊表达式:

      熟悉的星号 * 表示所有有效值。因此,每天运行的作业在第三个字段中有一个 *。

      破折号分隔值的范围。例如,从上午 9:00 到下午 5:00 每小时运行的作业。第二个字段应该是 9-17。

      间隔用斜杠/指定。每 15 分钟运行一次的作业在第一个字段中具有 H/15。请注意,第一个字段中的 H 具有特殊含义。如果您希望作业每 15 分钟运行一次,您可以将其配置为 0/15,这将使它在每小时开始时运行。但是,如果您以这种方式配置太多作业,您可能会使 Jenkins 控制器过载。最终,H 告诉 Jenkins 根据作业名称的哈希值选择一分钟。

      最后,您可以用逗号指定多个值。因此,周一、周三和周五运行的作业将在第五个字段中有 1,3,5。

      Jenkins 在其帮助部分中提供了一些用于调度的示例。

      每十五分钟(可能在 :07、:22、:37、:52):

      H/15 * * * *

      每小时前半段每十分钟一次(三次,可能在 :04, :14, :24):

      H(0-29)/10 * * * *

      每个工作日的上午 9:45 开始,到下午 3:45 结束,每两小时 45 分钟一次:

      45 9-16/2 * * 1-5

      每个工作日上午 8 点到下午 4 点之间每两小时一次(可能在上午 9:38、上午 11:38、下午 1:38、下午 3:38):

      H H(8-15)/2 * * 1-5

      除 12 月外,每月 1 日和 15 日每天一次:

      H H 1,15 1-11 * Jenkins 还有一组别名,可以更轻松地使用公共区间。

      表格的截图

      【讨论】:

        猜你喜欢
        • 2015-07-26
        • 1970-01-01
        • 2011-10-23
        • 2018-09-30
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2013-02-05
        相关资源
        最近更新 更多