Firefox CI 和 Taskgraph

Firefox 的 持续集成 (CI) 系统由三个部分组成。

首先是 Taskcluster,一个由 Mozilla 开发的任务执行框架。Taskcluster 能够构建复杂、可扩展且高度可定制的 CI 系统。Taskcluster 更像是一套可以用来创建 CI 系统的构建模块,而不是一个完整的 CI 系统本身。

第二部分是 Firefox CI 的 Taskcluster 实例。这是负责运行 Mozilla 大多数 CI 需求的 Taskcluster 部署。该组件由一个 Kubernetes 集群组成,用于运行 Taskcluster 服务(由 SRE 服务维护),一些自定义功能用于支持 Taskcluster 在 hg.mozilla.org 上运行以及 fxci-config 仓库中的访问控制(由发布工程维护)。

第三部分是 Taskgraph。Taskgraph 是一个 Python 库,可以生成任务的 DAG 并将其提交到 Taskcluster 实例。这是大多数 Gecko 和 Mozilla 开发人员在处理任务时将与之交互的组件,并将成为本文档其余部分的重点。

注意

历史上,Taskgraph 最初位于 mozilla-central 中。然后它被分叉到独立的 Taskgraph 以支持 Github 上的项目。随着时间的推移,维护两个分支变得越来越麻烦,因此它们正在被合并回一起。

今天,taskcluster/gecko_taskgraph 下的 Taskgraph 版本依赖于独立版本,该版本位于 third_party/python/taskcluster_taskgraph 下。这两个地方之间仍然存在大量重复,但 gecko_taskgraph 正在逐渐被重写以使用独立的 Taskgraph。

taskcluster 目录包含定义构建和测试 Gecko 树必须执行的任务图所需的所有文件。这比你想象的要复杂得多!Gecko 的 CI 图表中包含 30,000 多个任务,并且还在不断增加。

Taskgraph 支持

  • 大量的任务

  • 不同仓库的不同行为

  • “Try” 推送,并提供特殊方法来选择要执行的子图

  • 优化 - 跳过已经执行的任务

  • 使用增量转换作业描述为任务定义的方法,可以非常灵活地生成各种任务。

关于 Taskgraph 最全面的资源是 Taskgraph 的文档。这些文档将在适当的时候参考那里,并在必要时扩展 gecko_taskgraph 的特定主题。

如果您带着特定的目标阅读本文档,并且希望避免成为任务图专家,请查看 操作指南部分