概述
预构建会为特定组合的仓库、分支和 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)将运行并更新预构建。