周期性任务图

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:一个月中的日期,例如 116。在 28 以上要谨慎,请记住 2 月份。

  • weekday:一周中的某一天,MondayTuesday 等。完整的 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 任务从存储库运行任意代码,并且该代码可以轻松修改以创建具有其拥有的任何作用域的任务。