周期性任务图¶
cron 功能允许在树中调度周期性运行的任务图,而不是在推送时运行。
Cron.yml¶
在 Gecko 目录的根目录中,您会找到 .cron.yml。它定义了为 Gecko 运行的周期性任务(“cron 作业”。每个任务都指定了一个名称、要执行的操作以及一些参数来确定 cron 作业何时发生。
有关此文件格式和含义的详细信息,请参阅 架构。
工作原理¶
TaskCluster Hooks 服务 为每个支持周期性任务图的存储库配置了一个钩子。该钩子每 15 分钟运行一次,生成的该任务被称为“cron 任务”。该 cron 任务运行 build-decision 镜像。
该任务读取 .cron.yml
,然后查询当前时间(实际上是创建 cron 任务的时间,向下舍入到最接近的 15 分钟),并为在该时间安排的任何 cron 作业创建任务。
.cron.yml
中的每个 cron 作业都指定了一个 job.type
,它对应于一个函数,该函数负责在作业运行时创建 TaskCluster 任务。
描述时间¶
此 cron 实现理解以下指令,用于描述何时运行
minute
:运行的分钟,必须以 15 分钟为增量(见上文)hour
:运行的一天中的小时,采用 24 小时制。day
:一个月中的日期,例如 1、16。在 28 以上要谨慎,请记住 2 月份。weekday
:一周中的某一天,Monday、Tuesday 等。完整的 ISO 兼容单词。
同时设置“day”和“weekday”会导致 cron 作业不常运行,因此不建议这样做。
示例
# Never
when: []
# 4 AM and 4 PM, on the hour, every day.
when:
- {hour: 16, minute: 0}
- {hour: 4, minute: 0}
# The same as above, on a single line
when: [{hour: 16, minute: 0}, {hour: 4, minute: 0}]
# 4 AM on the second day of every month.
when:
- {day: 2, hour: 4, minute: 0}
# Mondays and Thursdays at 10 AM
when:
- {weekday: 'Monday', hour: 10, minute: 0}
- {weekday: 'Thursday', hour: 10, minute: 0}
注意
时间以 UTC(协调世界时)表示
决策任务¶
对于 job.type
“decision-task”,任务是根据 .taskcluster.yml
创建的,就像推送至存储库所产生的决策任务一样。它们使用不同的 taskGroupId
运行,并且可以自由创建构成任务图的其他任务。
作用域¶
cron 任务使用给定存储库的所有 cron 作业作用域的总和运行。例如,对于“sequoia”项目,作用域将是 assume:repo:hg.mozilla.org/projects/sequoia:cron:*
。每个 cron 作业都会根据名称为该特定作业创建具有作用域的任务。例如,该存储库上的 check-frob
cron 作业将以 assume:repo:hg.mozilla.org/projects/sequoia:cron:check-frob
运行。
重要
各个 cron 作用域是确保作业不会意外执行它不应该执行的操作的有用检查,但实际上并不能阻止作业使用提供给 cron 任务本身的任何作用域(..cron:*
作用域)。这仅仅是因为 cron 任务从存储库运行任意代码,并且该代码可以轻松修改以创建具有其拥有的任何作用域的任务。