任务图概述¶
任务图构建了一个有向无环图,其中图中的每个节点代表一个任务,每条边代表它们之间的依赖关系。
有关更多详细信息,请参阅 Taskgraph 的 图生成文档。
决策任务¶
当新图开始时,决策任务是创建的第一个任务。它负责创建任务图的其余部分。
推送的决策任务在树内定义,位于 .taskcluster.yml
中。该任务描述调用 mach taskcluster decision
并附带一些有关推送的元数据。该 mach 命令确定需要提交的任务图,然后调用 Taskcluster API 来创建这些任务。
注意
mach taskgraph decision
不 适用于人工调用。相反,请按照 本指南(在所有命令前加上 mach
)在本地调用 Taskgraph,而无需向 Taskcluster 提交任何内容。
种类¶
生成从“种类”开始。这些是 yaml 文件,表示彼此松散相关的任务分组。例如,在 Gecko 中有 build
和 test
种类。每种种类在 taskcluster/kinds 下都有自己的目录,其中包含一个 kind.yml
文件。
有关种类的更多信息,请参阅 Taskgraph 的 种类文档。有关 mozilla-central
中可用种类的列表,请参阅 种类参考。
加载器¶
接下来,一个“加载器”负责解析每个 kind.yml
文件并将其转换为初始的任务集。加载器将始终以满足 kind-dependencies
键的顺序解析种类。
有关更多详细信息,请参阅 Taskgraph 的 加载器文档。
转换¶
加载初始任务集后,将对每个任务应用转换。转换是 Python 函数,它以任务生成器作为输入,并生成任务生成器作为输出。可能在此过程中修改、添加或删除任务。
有关转换的更多详细信息,请参阅 Taskgrpah 的 转换文档,或有关 mozilla-central
中一些可用转换的信息,请参阅 转换部分。
目标任务¶
转换完成后,target_tasks 模块会筛选掉不适用于当前 参数集 的任何任务。
优化¶
生成“目标图”后,优化过程会尝试删除或替换图中不必要的任务。例如,如果推送没有修改任何可能影响它的文件,则可以删除该任务。
任务参数化¶
任务的一些组件只有在决策任务的最后阶段(在进行 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>
。此外,decision 和 self 可用作依赖项名称,以分别引用决策任务和任务本身。多个标签可以在单个字符串中替换,并且<<>
可用于转义字面<
。{"artifact-reference": "..<dep-name/artifact/name>.."}
类似于
task-reference
,但它会替换指向队列的getLatestArtifact
API 方法的 URL(GET 请求将重定向到工件本身)。
图配置¶
有几个配置设置与整个任务图相关。这些设置在任务图配置的根目录(通常为 taskcluster
)中的 config.yml
中指定。可用设置在 taskcluster/gecko_taskgraph/config.py 中内联记录。
动作任务¶
动作任务是根据手动触发(例如,在 Treeherder 中单击按钮)执行操作的任务。操作是重新触发或“添加新作业”的方式。
有关更多信息,请参阅 Taskgraph 的 动作文档。