使用Jenkins和H,“哈希符号”安排每晚22-03构建

时间:2013-06-19 15:25:58

标签: jenkins nightly-build

需要安排大约需要三个小时才能完成的建筑需要安排在办公时间以外的夜间建筑:不早于22:00,不迟于次日凌晨3:59。

我还想使用“H符号”来避免与未来的夜间构建发生冲突。来自Jenkins的在线帮助:

  

要允许定期计划的任务在系统上产生均匀负载,应尽可能使用符号H(表示“哈希”)。例如,对于十几个日常工作使用0 0 * * *将导致午夜大幅飙升。相比之下,使用H H * * *仍然会每天执行一次,但不能同时执行,更好地使用有限的资源。

(如何)我可以使用Jenkins安排这个?我试过的一切都被Jenkins视为无效:

  • H H(22,23,0,1,2,3) * * *

      

    输入无效:“H H(22,23,0,1,2,3)* * *”:第1:7行:期待“ - ”,找到','

  • H H22,23,0,1,2,3 * * *

      

    输入无效:“H H22,23,0,1,2,3 * * *”:第1:4行:意外令牌:22

  • H H(22-3) * * *

      

    输入无效:“H H(22-3)* * *”:第1行:9:1是无效值。必须在1之内   和-18

是否可以在不使用插件的情况下实现这一目标?

2 个答案:

答案 0 :(得分:7)

我认为你最接近的是使用:

  • H H(0-3) * * *这将在0:00到3:59
  • 之间的某个时间点运行
  • @midnight这将在0:00到2:59
  • 之间的某个时间点运行

H(4-8)构造仅在第二项大于第一项时才有效。

但你也可以自己填写小时。詹金斯实际上从来没有改变作业设置后运行的小时数。保存作业后,它基本上会创建一些随机小时,并始终在该特定时间运行作业。

当然,您也可以提交错误报告或功能请求,您应该将其指定为H(22-3)或更好,修复代码并提交补丁;)

答案 1 :(得分:1)

不直接支持编写这样的表达式,但是,因为现在有时区支持,所以您可以解决此问题。

# DONT COPY PASTE - THIS DOESNT WORK!
# This is what we would like to write, but is not supported
H H(22-3) * * *

上面的表达式表示我们想在22 PM到3 AM之间进行构建,这是一个5个小时的时间,因此我们可以这样写:

# Assuming we're in GMT+2 we can just shift the timezone
# so 22-03 becomes 10-15 wich is 12 hours earlier so the
# timezone is GMT-10
TZ=Etc/GMT-10
H H(10-15) * * *

我在JENKINS-18313的评论中找到了解决方法

更新:

当前存在一个错误JENKINS-57702,并且未正确评估时区GMT-XX。一种解决方法是使用等效的时区,在本示例中为 夏威夷:

TZ=US/Hawaii
H H(10-15) * * *