如何在Jenkins中安排构建任务?

80

我该如何安排 Jenkins 构建任务,使其每天只能在特定的几个小时进行构建呢?

例如,每天下午 4 点开始。

0 16 1-7 * *

我理解为"每个月的星期一至星期日下午4点整点开始,从0分钟开始",但它却每分钟执行一次 :(

感谢任何建议。谢谢!


一个人在哪里输入来安排工作? - brodie31k
在您的项目配置部分的“构建触发器”中选择“定期构建”。 - Youssef Boudaya
10个回答

109
更新:请阅读其他答案和评论,因为它们包含更多信息(例如哈希函数),这是我最初回答此问题时不知道的。
根据Jenkins自己的帮助(“?”按钮)对于计划任务指定了5个字段:

该字段遵循cron的语法(存在一些小差异)。具体而言,每行由TAB或空格分隔的5个字段组成:分钟 小时 DOM 月份 DOW

我刚试图让一个工作在下午4:42启动(我的大致当地时间),并且使用以下方法成功了,虽然要多等约30秒:
42 16 * * *

如果你想要多次执行,我认为以下代码应该可以实现:

0 16,18,20,22 * * *
每天下午4点、6点、8点和10点。

好的,星号太多了。我的问题,我会修正我的主题。 - deadfish
嗨,Michal,你还在为调度问题而苦恼吗?你接受了我的答案,但你的评论只涉及修复问题,我看到你已经做到了。谢谢。 - Zach Young

86

在作业配置中,可以定义各种构建触发器。使用定期构建,您可以通过定义日期或每周的某一天和执行构建的时间来安排构建。

格式如下:

分钟 (0-59), 小时 (0-23), 日 (1-31), 月份(1-12), 星期几(0-6)

可以插入表示单词Hash的字母H代替任意值,它将根据项目名称的哈希代码计算参数。这样,如果您同时在构建机器上构建多个项目,每天在午夜构建,它们不会同时开始构建执行,每个项目在不同的分钟开始执行,具体取决于其哈希码。您还可以指定值介于数字之间,例如H(0,30)将返回范围为0-30的可能哈希的项目哈希代码。

示例:

每天早上8:30开始构建,周一至周五:

  • 30 08 * * 1-5

平日每天构建两次,在中午12:00和午夜00:00,星期天至星期四:

  • 00 0,12 * * 0-4

每天在下午晚些时候开始构建,在下午4:00 p.m. - 4:59 p.m.或16:00 -16:59之间,具体取决于项目的哈希:

  • H 16 * * 1-5

在午夜开始构建:

  • @midnight

或者每个星期六在午夜开始构建:

  • 59 23 * * 6
每月1日凌晨2:00-02:30:
  • H(0-30) 02 01 * *

更多CRON表达式信息


我认为开始每天的构建应该在下午晚些时候的4:00 p.m. - 4:59 p.m.或16:00 -16:59之间,具体取决于项目的哈希值: 应该是 H 16 * * *(不是 H 16 * * 1-5) - user836846
2
谢谢,但你确定 1-6 是周一到周五吗?不应该是 1-5 吗?等等。 - vikingsteve
1
如果1-6代表周一至周六,那么0-5应该代表周日至周五。感谢提供这么多有用的例子。 - inaitgaJ
1
更正:H(0,30) 02 01 * * 应为 H(0-30) 02 01 * * - Sander de Jong

12

这个例子是每天两次,大约在早上9点和下午5点(根据评论进行了编辑)。

H 9,17 * * * 

6
不完全正确。这将在早上9:00至9:59之间运行一次,以及下午5:00至5:59之间再运行一次。 - egrunin
3
更加准确地说:那份工作将在上午9:00至9:59之间开始一次,在下午5:00至5:59之间又开始一次。如果工作时间更长,该工作将不会被终止。 - Stephan Schielke
4
请注意:"will run once between 0900 and 0959"中的H代表"哈希(hash)"——它是基于项目生成的哈希值,因此该项目将始终在第九个小时和第十七个小时的同一分钟运行。如果哈希算法为您的项目生成数字"16",那么您的项目作业将始终在0916和1716开始。 - DrUseful

10
在Jenkins中安排任务的步骤:
  1. 点击作业需求的“配置”
  2. 向下滚动到“构建触发器” - 子标题
  3. 勾选“定期构建”的复选框
  4. 在"Schedule"字段中添加时间表,例如@midnight

enter image description here

注意:在计划字段下方可以看到上次和下次运行的日期时间。

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

@hourly, @daily, @weekly, @monthly, @midnight

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

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

@weekly --> 在星期日凌晨零点构建每周--> 0 0 * * 0

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


4
每天下午4点到6点之间构建一次,您可以使用:
H H(15-17) * * *

3
H H(5-21)/2 * * 1-5

每周一至周五每两个小时构建一次


2
这似乎是一个cron表达式。请注意,您的示例仅在每月的第一到第七天的16:00上运行。您可能有其他错误,或者Jenkins使用了非标准的CRON表达式。

1
Jenkins使用Cron表达式
您可以通过键入@hourly来简单地安排每小时构建。

1
在 Jenkins 中,我们的格式如下:

分钟(0-59) 小时(0-23) 日(1-7) 月(1-12) 星期几


0

每周一至周日下午4点可以尝试这个:

0 16 * * *

您可以在Jenkins的“定期构建”中配置时检查描述消息(请参见下面给出的屏幕截图)。

“最后运行时间:IST 时间 2019年11月17日(星期日) 下午4:00:05; 下次运行时间:IST 时间 2019年11月18日 (星期一) 下午4:00:05。”

屏幕截图

enter image description here

时间“2019年11月18日星期一下午4:00:05 IST”中的秒数指的是我们当前系统的秒数。


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