使用指南

所有这些工具都旨在帮助您更高效地完成工作。但是,学习如何生成任务图可能不是您感兴趣的工作。本节将帮助您轻松完成对任务图的一些更常见的更改。

Taskgraph 的文档提供了许多相关的使用指南

注意

如果您遇到对 taskgraph 命令的引用,只需在命令前添加 ./mach 即可使其在 mozilla-central 中工作。

请参阅 Taskgraph 的 使用指南部分 以获取更多指南!

常见更改

此外,以下是一些在 mozilla-central 中进行常见更改的提示。

更改测试特性

首先,找到测试描述。它位于 taskcluster/kinds/*/tests.yml 中,对应于相应的种类(请参阅 种类)。您将为每个测试套件找到一个 YAML 代码段,每个代码段定义测试的特性。例如,chunks 属性指定要运行的块数。如果所有平台的块数相同,则可以将其指定为简单的整数,或者可以根据测试平台进行键控。例如

chunks:
    by-test-platform:
        linux64/debug: 10
        default: 8

完整的可用属性集位于 taskcluster/gecko_taskgraph/transforms/test/__init__.py 中。其他一些常用修改的属性包括 max-run-time(如果测试因超过 maxRunTime 而被终止,则很有用)和 treeherder-symbol

注意

Android 测试也在 mozharness 层级进行分块,因此您也需要修改相关的 mozharness 配置。

添加测试套件

要添加新的测试套件,您需要知道该套件的正确 mozharness 调用,以及它适合哪种类型(请参阅 种类)。

taskcluster/kinds/<kind>/tests.yml 中添加新的代码段,从该文件中的其他代码段复制。含义应该很清楚,但是如果您需要权威文档,可以在 taskcluster/gecko_taskgraph/transforms/test/__init__.py 中找到。代码段名称是在 try 语法中引用测试的名称。

将您的新测试添加到同一目录中 test-sets.yml 中的测试集中。如果测试应该只在有限的平台集上运行,您可能需要定义一个新的测试集,并在 test-platforms.yml 中的相应平台中引用它。如果您这样做,请在 test-sets.yml 中包含一些有用的注释,以便下一个用户参考。

使新测试变为绿色

当测试尚未稳定变为绿色时,该测试的配置不应落地到集成分支。当然,您可以控制配置的落地位置!对于许多情况,最简单的方法是在 try 中使测试变为绿色:将运行测试的配置推送到 try,以及您修复剩余测试失败的工作。

在与团队合作时,检出一个“分支”存储库以在团队之间共享,并将测试配置落地到该存储库中。一旦测试变为绿色,合并到集成分支,测试也将开始在那里运行。

添加新任务

如果您要添加一个不是测试套件的新任务,则有多种选择。需要考虑几个问题

  • 这是否是一个新的构建平台或变体,它将生成一个工件,然后通过通常的测试套件运行?

  • 此任务是否依赖于其他任务?其他任务是否依赖于它?

  • 这是否是一些相关任务中的一个,或者您是否需要使用某种编程方式(例如,分块)生成大量任务?

  • 任务是如何实际执行的?Mozharness?Mach?

  • 任务需要什么样的环境?

有了这些信息,您可以选择几种实现此新任务的选项。尝试选择最简单的解决方案来满足您的近期需求。由于这一切都在树内实现,因此当您需要更多通用性时,以后重构并不困难。

现有种类

最简单的选项是将您的任务添加到现有种类中。当任务在该种类中“有意义”时,这最实用——例如,如果您的任务是使用类似于现有构建任务的 mozharness 脚本为新平台构建安装程序,那么将您的任务添加到 build 种类中最有意义。如果您需要在种类中添加一些额外的功能,可以根据需要修改实现,只要修改是完整的并且对下一个开发人员有用即可。

build 种类中的任务会生成 Firefox 安装程序,而 test 种类将为每个 build 任务添加一组完整的 Firefox 测试。

新种类

接下来要考虑的选项是添加新的种类。一个独特的种类可以提供与其他任务类型的隔离,如果您要添加一种实验性的任务类型,这可能很有用。

种类的复杂程度可能会有所不同。最简单的种类使用转换加载器从 jobs 键读取作业列表,并应用标准的 jobtask 转换

implementation: taskgraph.task.transform:TransformTask
transforms:
   - taskgraph.transforms.job:transforms
   - taskgraph.transforms.task:transforms
jobs:
   - ..your job description here..

作业描述在 taskcluster/gecko_taskgraph/transforms/job/__init__.py 中定义和记录。

自定义种类加载器

如果您的任务依赖于其他任务,那么创建哪些任务的决定可能需要一些代码。例如,test 种类会遍历图中的构建,为每个构建生成一组完整的测试任务。这种特定构建后行为在 taskcluster/gecko_taskgraph/loader/test.py 中定义的加载器中实现。

当您想要创建的任务集不是静态的,而是基于其他内容(例如,可用的构建)或任务的依赖关系很复杂时,自定义加载器很有用。

自定义转换

大多数加载器应用一系列“转换”,这些转换从任务的初始用户友好描述开始,并以适合插入 Taskcluster 队列的任务定义结束。

自定义转换可用于应用默认值,简化种类中的 YAML 文件。它们还可以应用更易于用代码表达而不是用 YAML 表达的业务逻辑。

转换不必是一对一的:转换可以为每个输入生成零个或多个输出。例如,测试转换通过为给定输入的每个块生成输出来执行分块。

理想情况下,这些转换将生成作业描述,以便您可以使用现有的 jobtask 转换

transforms:
   - taskgraph.transforms.my_stuff:transforms
   - taskgraph.transforms.job:transforms
   - taskgraph.transforms.task:transforms

尽量保持转换简单、单一用途且有良好的文档!

自定义 Run-Using

如果任务的执行方式是唯一的(因此,不是 mach 命令或 mozharness 调用),您可以添加作业描述的“run”部分的新实现。在执行此操作之前,请考虑修改任务以支持通过 mozharness 或 mach 调用是否会是更好的投资。如果这不可行,则在 taskcluster/gecko_taskgraph/transforms/jobs 中添加一个与同类文件结构类似的新文件将使作业描述可以使用新的 run-using 选项。