如何安排詹金斯的工作?


284

我在詹金斯(Jenkins)添加了一份新工作,我想定期安排它。

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

15 13 * * *

但是它不会在计划的时间运行。

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

在此处输入图片说明

该作业应在4:20 AM运行,但未运行。


它可以运行还是不能运行?如果我没记错的话,你的计划人员说“每天13:15”。是的:我认为这是安排定期构建的正确方法。
Fildor 2012年

1
也许这会对您有所帮助:en.wikipedia.org/wiki/Cron#CRON_expression-我看到Cedric已经链接了它……也许您应该告诉我们,预期期限是多少?
Fildor 2012年

1
作为参考,RHS上的蓝色问号充分说明了可能的值
devstopfix 2013年

这里是一个很好的网页来自动生成- > crontab-generator.org
维安卡拉斯科

Answers:


505

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

Jenkins使用了cron表达式,不同的字段是:

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

如果您想每5分钟安排一次构建,就可以完成此工作: */5 * * * *

如果您想每天在8h00安排构建,这将完成工作: 0 8 * * *

对于过去的几个版本(2014年),Jenkins有一个新参数H(摘自Jenkins代码文档):

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

例如,使用0 0 * * *一打日常工作将在午夜引起大量的高峰。相反,使用H H * * *仍然会每天执行一次每个作业,但不是同时执行所有作业,更好地使用有限的资源。

另请注意:

H符号可以被认为是在一定范围内的随机值,但它实际上是作业名称,而不是随机函数的哈希值,所以该值仍然是任何项目稳定。

使用“ H”的更多示例


5
那么如何每隔6小时定期构建一次。请问* */6 * * *是否行得通呢?
2013年

1
@ѕтƒ:是的,这将启动构建,每6小时
塞德里克朱利安

31
通过使用“ H / 5 * * * *”而不是“ * / 5 * * * *”平均分配负载
Friederbluemle 2014年

1
如果要限制H的范围,可以使用H(1-3)例如在1到3之间选择一个数字。例如,HH(1-3)* * *在凌晨1点至凌晨3点之间运行一次
AndyClaw 2014年

16
令人沮丧的是,在我的大脑中似乎有些东西根本无法掌握这些表达式,而不必不断引用文档。
技能M2

34

Jenkins可让您进行多次设置,并以换行符分隔。

如果您需要每天早上7点以及每个星期日下午4点进行构建,则以下方法可以很好地运行。

H 7 * * *

H 16 * * 0

1
H(0-0)6 * * 1(适用于美国东部时间星期一上午6点运行),H(0-0)16 * * 0(适用于星期日东部时间下午4点)。运行普通的H 16(不会在1600 / 4pm运行),您必须使用H(0-0)16 ....
AKS

2
@ArunSangal而不是H(0-0)您可以简单地使用0using的优点H是,并非所有Jobs都将尝试完全同时运行,而是尝试获取“下一个可用时隙”
derHugo


26

格式如下:

分钟(0-59),小时(0-23),DAY(1-31),MONTH(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 PM-4:59 pm或16:00 -16:59之间的每天开始构建,具体取决于项目哈希:H 16 * * 1-5

  4. 在午夜开始构建:@午夜或在每个星期六的午夜开始构建:59 23 * * 6

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


1
很好的解释。
vivek '18 -10-29

10

詹金斯计划作业的步骤:

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

在此处输入图片说明

注意:在计划字段下,可以查看上次和下一个日期时间运行。

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

@chrisinmtown,添加了预定义的别名列表,希望对您有所帮助:)
Gavriel Cohen,

7

要每5分钟安排一次cron作业,您需要定义cron设置,如下所示:

*/5 * * * *

我想在8:00 AM EST准确地运行作业,所以我构造的cron表达式为-00 08 * * *可以吗?
Sangram Anand 2012年

遗憾的是它不工作,附着在后它的屏幕截图,顺便说一句我与当前EST时间,即测试它4:20有事..
SANGRAM阿南德

EST时间与构建服务器上的时区相同?
fduff 2012年

是的,时间是一样的,顺便说一下* / 5 * * * *(每5mts)效果很好。
Sangram Anand 2012年

要恰好在美国东部标准时间上午8点运行作业,您必须这样做:H(0-0)8 * * *
AKS 2015年


2

Jenkins在计划中使用Cron格式。您可以参考此链接以获取更多详细信息https://en.wikipedia.org/wiki/Cron。还有一件事,詹金斯为我们提供了非常有用的预览。请看截图。 在此处输入图片说明

希望对您有所帮助。谢谢


如何应用这些更改?
Balaji Boggaram Ramanarayan


-1

对于不想等待整整一个小时来查看特定构建是否触发的任何人:

为了获得哈希值,您可以在此处下载哈希器。使用分支页面上键入的完整项目名称,并按如下方式打印:

System.out.println(Hash.from("sub/microservices/master"));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.