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
的特定主题。
如果您带着特定的目标阅读本文档,并且希望避免成为任务图专家,请查看 操作指南部分。
- Taskgraph 概述
- 操作指南
- 转换
- 优化策略
- 周期性 Taskgraph
- Try
- 版本发布
- CI 中的版本控制
- Taskcluster 配置
- 参考
- 任务种类
- build
- build-fat-aar
- build-signing
- build-mac-signing
- build-mac-notarization
- artifact-build
- bootstrap
- hazard
- l10n
- shippable-l10n
- shippable-l10n-signing
- shippable-l10n-mac-signing
- shippable-l10n-mac-notarization
- source-test
- code-review
- upload-symbols
- upload-symbols-dummy
- upload-generated-sources
- upload-generated-sources-dummy
- valgrind
- searchfox
- static-analysis-autotest
- toolchain
- spidermonkey
- test
- docker-image
- balrog
- beetmover
- beetmover-l10n
- beetmover-repackage
- release-beetmover-push-to-release
- beetmover-source
- beetmover-geckoview
- beetmover-apt
- condprof
- release-source-checksums-signing
- beetmover-checksums
- release-beetmover-source-checksums
- perftest
- release-balrog-submit-toplevel
- release-secondary-balrog-submit-toplevel
- release-balrog-scheduling
- release-secondary-balrog-scheduling
- release-binary-transparency
- release-flatpak-repackage
- release-flatpak-push
- release-secondary-flatpak-push
- release-notify-av-announce
- release-notify-push
- release-notify-ship
- release-secondary-notify-ship
- release-notify-promote
- release-notify-started
- release-notify-testrail
- release-bouncer-sub
- release-mark-as-shipped
- release-bouncer-aliases
- cron-bouncer-check
- bouncer-locations
- release-bouncer-check
- release-generate-checksums
- release-generate-checksums-signing
- release-generate-checksums-beetmover
- release-final-verify
- release-secondary-final-verify
- release-push-langpacks
- release-beetmover-signed-langpacks
- release-beetmover-signed-langpacks-checksums
- release-update-verify
- release-update-verify-next
- release-update-verify-config
- release-secondary-update-verify-config
- release-update-verify-config-next
- release-updates-builder
- release-version-bump
- release-source
- release-source-signing
- release-partner-repack
- release-partner-attribution
- release-partner-repack-chunking-dummy
- release-partner-repack-signing
- release-partner-repack-mac-signing
- release-partner-repack-mac-notarization
- release-partner-repack-repackage
- release-partner-repack-repackage-signing
- release-partner-repack-beetmover
- release-partner-attribution-beetmover
- release-partner-repack-bouncer-sub
- release-early-tagging
- release-eme-free-repack
- release-eme-free-repack-signing
- release-eme-free-repack-repackage
- release-eme-free-repack-repackage-signing
- release-eme-free-repack-beetmover
- release-eme-free-repack-beetmover-checksums
- release-eme-free-repack-mac-signing
- release-eme-free-repack-mac-notarization
- repackage
- repackage-l10n
- repackage-deb
- repackage-deb-l10n
- repackage-signing
- repackage-signing-l10n
- mar-signing
- mar-signing-l10n
- mar-signing-autograph-stage
- repackage-msi
- repackage-signing-msi
- repackage-msix
- repackage-shippable-l10n-msix
- repackage-signing-msix
- repackage-signing-shippable-l10n-msix
- repackage-snap
- release-msix-push
- repo-update
- partials
- partials-signing
- post-balrog-dummy
- post-beetmover-dummy
- post-beetmover-checksums-dummy
- post-beetmover-components-dummy
- post-langpack-dummy
- post-update-verify-dummy
- fetch
- packages
- diffoscope
- addon
- openh264-plugin
- openh264-signing
- webrender
- instrumented-build
- generate-profile
- geckodriver-signing
- geckodriver-mac-notarization
- maybe-release
- l10n-bump
- merge-automation
- sentry
- system-symbols
- system-symbols-upload
- system-symbols-reprocess
- scriptworker-canary
- updatebot
- fuzzing
- startup-test
- l10n-cross-channel
- attribution
- attribution-l10n
- snap-upstream-build
- snap-upstream-test
- trigger-comm-central
- build-components
- build-bundle
- build-apk
- build-samples-browser
- signing
- signing-bundle
- signing-apk
- test-components
- test-apk
- ui-test-apk
- android-browsertime
- android-startup-test
- post-signing-dummy
- beetmover-components
- beetmover-android-app
- push-bundle
- android-l10n
- release-update-product-channel-version
- instrumented-build-apk
- generate-baseline-profile-firebase
- 参数
- 任务属性
- kind
- run_on_projects
- run_on_hg_branches
- task_duplicates
- build_platform
- build_type
- test_platform
- unittest_suite
- unittest_category
- unittest_try_name
- unittest_variant
- talos_try_name
- raptor_try_name
- job_try_name
- test_chunk
- test_manifests
- image_name
- nightly
- shippable
- all_locales
- all_locales_with_changesets
- l10n_chunk
- chunk_locales
- locale
- signed
- stub-installer
- repackage_type
- fetch-artifact
- fetch-alias
- toolchain-artifact
- toolchain-alias
- toolchain-env
- toolchain-command
- 始终目标
- 发布产品
- 发布阶段
- 构件前缀
- 构件映射
- 发布构件
- 批次
- 启用完整崩溃符号
- 跳过上传崩溃符号
- upload-generated-sources
- 定时任务
- 缓存任务
- 急切索引
- 所需签核
- 更新渠道
- MAR 渠道 ID
- 已接受的 MAR 渠道 ID
- OpenH264 版本
- code-review
- 重新触发
- 禁用推送 APK
- 禁用构建签名
- 启用构建签名
- 运行视觉指标
- 跳过验证测试打包
- geckodriver
- 发布时重建
- 本地工具链
- artifact-build
- Maven 包
- 支持构件构建
- 主要种类依赖项
- Snap 测试类型
- Snap 测试版本
- 构建类型
- 组件
- APK 文件
- AAB 文件
- 发布类型
- 发布产品
- 构件
- 是否为最终分块任务
- 旧版
- 夜间测试
- 屏幕截图
- ABI
- APK
- 测试清单
- Lull 调度
- 当前分块
- 总分块数
- 工具链提取
- 缓存
- 任务种类