缓存¶
树内任务使用了各种缓存。此页面尝试记录这些缓存及其适当的使用方法。
缓存本质上是隔离的文件系统,在任务之间持久化。例如,如果两个任务在一个工作器上依次运行,并且这两个任务都请求相同的缓存,则后续任务将能够看到第一个任务创建的缓存中的文件。还值得注意的是,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 文件的旧位置。请改用每个级别的缓存。