任务图概述

任务图构建了一个有向无环图,其中图中的每个节点代表一个任务,每条边代表它们之间的依赖关系。

有关更多详细信息,请参阅 Taskgraph 的 图生成文档

决策任务

当新图开始时,决策任务是创建的第一个任务。它负责创建任务图的其余部分。

推送的决策任务在树内定义,位于 .taskcluster.yml 中。该任务描述调用 mach taskcluster decision 并附带一些有关推送的元数据。该 mach 命令确定需要提交的任务图,然后调用 Taskcluster API 来创建这些任务。

注意

mach taskgraph decision 适用于人工调用。相反,请按照 本指南(在所有命令前加上 mach)在本地调用 Taskgraph,而无需向 Taskcluster 提交任何内容。

种类

生成从“种类”开始。这些是 yaml 文件,表示彼此松散相关的任务分组。例如,在 Gecko 中有 buildtest 种类。每种种类在 taskcluster/kinds 下都有自己的目录,其中包含一个 kind.yml 文件。

有关种类的更多信息,请参阅 Taskgraph 的 种类文档。有关 mozilla-central 中可用种类的列表,请参阅 种类参考

加载器

接下来,一个“加载器”负责解析每个 kind.yml 文件并将其转换为初始的任务集。加载器将始终以满足 kind-dependencies 键的顺序解析种类。

有关更多详细信息,请参阅 Taskgraph 的 加载器文档

转换

加载初始任务集后,将对每个任务应用转换。转换是 Python 函数,它以任务生成器作为输入,并生成任务生成器作为输出。可能在此过程中修改、添加或删除任务。

有关转换的更多详细信息,请参阅 Taskgrpah 的 转换文档,或有关 mozilla-central 中一些可用转换的信息,请参阅 转换部分

目标任务

转换完成后,target_tasks 模块会筛选掉不适用于当前 参数集 的任何任务。

优化

生成“目标图”后,优化过程会尝试删除或替换图中不必要的任务。例如,如果推送没有修改任何可能影响它的文件,则可以删除该任务。

有关更多详细信息,请参阅 Taskgraph 的 优化文档,或 mozilla-central 中可用的 优化策略

任务参数化

任务的一些组件只有在决策任务的最后阶段(在进行 queue.createTask 调用之前)才能确定。这些使用简单的参数化值指定,如下所示

{"relative-datestamp": "certain number of seconds/hours/days/years"}

此类对象将在进行 queue.createTask 调用之前替换为当前时间的一个偏移量。例如,工件过期时间可以指定为 {"relative-datestamp": "1 year"}

{"task-reference": "string containing <dep-name>"}

任务定义可能包含此类“任务引用”。这些将在优化步骤中被替换,用命名依赖项的相应 taskId 替换字符串中的 <dep-name>。此外,decisionself 可用作依赖项名称,以分别引用决策任务和任务本身。多个标签可以在单个字符串中替换,并且 <<> 可用于转义字面 <

{"artifact-reference": "..<dep-name/artifact/name>.."}

类似于 task-reference,但它会替换指向队列的 getLatestArtifact API 方法的 URL(GET 请求将重定向到工件本身)。

图配置

有几个配置设置与整个任务图相关。这些设置在任务图配置的根目录(通常为 taskcluster)中的 config.yml 中指定。可用设置在 taskcluster/gecko_taskgraph/config.py 中内联记录。

动作任务

动作任务是根据手动触发(例如,在 Treeherder 中单击按钮)执行操作的任务。操作是重新触发或“添加新作业”的方式。

有关更多信息,请参阅 Taskgraph 的 动作文档