概述
预构建会为仓库、分支和devcontainer.json
配置文件的特定组合组装 codespace 的主要组件。它提供了一种快速创建新 codespace 的方法。特别是对于复杂和/或大型仓库,你可以使用预构建更快地创建新的 codespace。
如果目前创建仓库的 codespace 需要超过 2 分钟,则你可能会从使用预构建中受益。这是因为,使用预构建,任何源代码、编辑器扩展、项目依赖项、命令和配置都已在创建 codespace 之前下载、安装和应用。
默认情况下,每当你将更改推送到你的仓库时,GitHub Codespaces 都会使用 GitHub Actions 自动更新你的预构建。
当预构建可用于仓库的特定分支、特定的开发容器配置文件和你的区域时,你将在创建 codespace 时在机器类型选项列表中看到“预构建就绪”标签。如果预构建仍在创建中,你将看到“预构建正在进行中”标签。更多信息,请参阅“为仓库创建 codespace”。
当你在“你的 codespaces”页面从模板创建 codespace 时,GitHub 可能会自动使用预构建来加快创建速度。有关模板的更多信息,请参阅“从模板创建 codespace”。
注意
每个创建的预构建都会占用存储空间,这将产生可计费费用,或者对于您的个人 GitHub 帐户拥有的存储库,将使用您每月包含的存储空间的一部分。更多信息,请参见“GitHub Codespaces计费说明”。
预构建过程
要创建预构建,您需要设置预构建配置。保存配置后,GitHub Actions 工作流将运行以创建每个所需的预构建;每个预构建一个工作流。每当需要更新配置的预构建时,工作流也会运行。这可能发生在计划的时间间隔内,在向启用预构建的存储库推送时,或者在更改开发容器配置时。更多信息,请参见“配置预构建”。
当预构建配置工作流运行时,GitHub 会创建一个临时 Codespace,执行设置操作,直到包含devcontainer.json
文件中的任何onCreateCommand
和updateContentCommand
命令为止。在创建预构建期间不会运行任何postCreateCommand
命令。有关这些命令的更多信息,请参阅 VS Code 文档中的devcontainer.json
参考。然后对生成的容器进行快照并进行存储。
与其他 GitHub Actions 工作流一样,运行预构建配置工作流将消耗您帐户中包含的 GitHub Actions 分钟数(如果您有的话),或者将产生 GitHub Actions 分钟数的费用。Codespace 预构建的存储计费方式与活动或已停止 Codespace 的存储计费方式相同。更多信息,请参见“GitHub Codespaces计费说明”。
当您从预构建创建 Codespace 时,GitHub 会从存储中下载现有的容器快照,并将其部署到新的虚拟机上,完成开发容器配置中指定的其余命令。由于许多操作(例如克隆存储库)已经完成,因此从预构建创建 Codespace 比不使用预构建创建 Codespace 要快得多。这在存储库很大和/或onCreateCommand
命令运行时间很长的情况下尤其如此。
关于将更改推送到启用预构建的分支
默认情况下,每次推送到具有预构建配置的分支都会导致 GitHub 托管的 GitHub Actions 工作流运行以更新预构建。预构建工作流的并发限制为给定预构建配置一次运行一个工作流,除非进行了影响关联存储库的开发容器配置的更改。更多信息,请参见“开发容器简介”。如果某个运行正在进行中,则排队时间最新的工作流运行将在当前运行完成后运行。
将预构建设置为在每次推送时更新,这意味着如果对您的存储库进行非常频繁的推送,预构建更新将至少与运行预构建工作流所需的时间一样频繁。也就是说,如果您的工作流运行通常需要一个小时才能完成,则如果运行成功,则大约每小时都会为您的存储库创建预构建,或者如果推送更改了分支上的开发容器配置,则会更频繁。
例如,假设对具有预构建配置的分支进行了 5 次快速连续的推送。
-
将启动一个工作流运行来处理第一次推送,以更新预构建。
-
如果其余 4 次推送不影响开发容器配置,则这些推送的工作流运行将处于“挂起”状态。
如果其余 4 次推送中的任何一次更改了开发容器配置,则服务不会跳过该推送,而是会立即运行预构建创建工作流,如果成功则相应地更新预构建。
-
第一次运行完成后,推送 2、3 和 4 的工作流运行将被取消,最后一个排队的工作流(推送 5)将运行并更新预构建。