缓存

树内任务使用了各种缓存。此页面尝试记录这些缓存及其适当的使用方法。

缓存本质上是隔离的文件系统,在任务之间持久化。例如,如果两个任务在一个工作器上依次运行,并且这两个任务都请求相同的缓存,则后续任务将能够看到第一个任务创建的缓存中的文件。还值得注意的是,TaskCluster 工作器确保一个缓存一次只能被一个任务使用。如果一个工作器同时运行多个请求相同名称缓存的任务,则该工作器将在这个工作器上拥有多个相同名称的缓存。

缓存和 run-task

run-task 是我们的通用任务包装器脚本。它执行一些常见的活动,例如确保版本控制检出存在。

run-task 的作用之一是验证和清理缓存。它通过在其第一次使用时在缓存中存储状态来实现这一点。如果现有缓存的记录的 *功能* 与当前任务的预期不符,则 run-task 会退出。这确保了缓存仅由具有相似执行 *配置文件* 的任务重用。这可以防止在不兼容的任务之间意外使用缓存。它还允许 run-task 对缓存的状态做出假设,这有助于避免代价高昂的操作。

此外,run-task 的哈希值用于派生缓存名称。因此,每次 run-task 发生更改时,都会使用一组新的缓存。这确保了对 run-task 的任何向后不兼容的更改或错误修复都会导致新的缓存。

某些缓存保留用于与 run-task 一起使用。该属性将在下面标明。

常用缓存

版本控制缓存

level-{{level}}-checkouts-{{hash}}

此缓存保存版本控制检出,每个检出都在一个以存储库名称命名的子目录中(例如,gecko)。

检出应该是只读的。如果任务需要根据检出的内容创建新文件,则应将此内容写入单独的目录/缓存(如工作区)。

此缓存名称模式由 run-task 管理,并且只能与 run-task 一起使用。

level-{{level}}-checkouts-sparse-{{hash}}

这与上面类似,但在检出是稀疏的(包含文件子集)时使用。

level-{{level}}-checkouts-{{version}}(已弃用)

此缓存保存版本控制检出,每个检出都在一个以存储库名称命名的子目录中(例如,gecko)。

检出应该是只读的。如果任务需要根据检出的内容创建新文件,则应将此内容写入单独的目录/缓存(如工作区)。

缓存名称中出现 version 参数是为了允许对缓存的行为进行向后不兼容的更改。

hg-store 包含一个 共享存储 <https://www.mercurial-scm.org/wiki/ShareExtension>,它由 hg robustcheckout 使用。如果您使用的是 run-task,则应将 HG_STORE_PATH 环境变量设置为指向此目录。如果您使用的是 hg robustcheckout,请将此目录传递给 --sharebase 选项。

工作区缓存

level-{{level}}-*-workspace

这些缓存(各种名称,通常以 workspace 结尾)包含要在任务调用之间共享的状态。用例取决于任务。

其他

level-{{level}}-tooltool-cache-{{hash}}

Tooltool 调用应该使用此缓存。Tooltool 会将文件存储在此处,并按其哈希值进行索引。

此缓存名称模式保留用于与 run-task 一起使用,并且只能由 run-task 使用

tooltool-cache(已弃用)

Tooltool 文件的旧位置。请改用每个级别的缓存。