Skip to main content

关于 GitHub Codespaces 预构建

GitHub Codespaces 预生成有助于加快为大型或复杂存储库创建新的 codespace 的速度。

谁可以使用此功能?

You create and configure prebuilds in your repository's settings. GitHub Codespaces 的存储库级设置适用于个人帐户拥有的所有存储库。

对于组织拥有的存储库,GitHub Codespaces 的存储库级别设置适用于使用 GitHub Team 和 GitHub Enterprise 计划的组织。 要访问设置,组织或其父企业必须已添加付款方式并为 GitHub Codespaces 设置了支出限制。 有关详细信息,请参阅 选择在您的组织中谁拥有和支付 Codespaces 的费用GitHub的计划

概述

预生成为存储库、分支和 devcontainer.json 配置文件的特定组合组装 codespace 的主要组件。 它提供了一种快速创建新 codespace 的方法。 特别是对于复杂和/或大型的存储库,你可以使用预生成更快地创建新 codespace。

如果当前为存储库创建 codespace 的时间超过 2 分钟,则使用预生成可能会更好。 这是因为,使用预生成,会在创建 codespace 之前下载、安装和应用任何源代码、编辑器扩展、项目依赖项、命令和配置。

默认情况下,每当将更改推送到存储库时,GitHub Codespaces 都会使用 GitHub Actions 自动更新预生成。

当预生成可用于存储库的特定分支、特定开发容器配置文件和你所在的区域时,你会在创建 codespace 时在计算机类型选项列表中看到“ Prebuild ready”标签。 如果预构建仍在进行中,你将看到“ 预构建正在进行”标签。 有关详细信息,请参阅“AUTOTITLE”。

可用机器类型的列表的屏幕截图:2 核、4 核、8 核、16 核和 32 核,全部标记为“预建就绪”。

根据“你的 codespace”页面上的模板创建 codespace 时,GitHub 可能会自动使用预生成来加快创建时间。 有关模板的详细信息,请参阅 AUTOTITLE。

注意

创建的每个预生成版本都会消耗存储空间,这将产生计费费用,或者对于你的个人 GitHub 帐户拥有的存储库,将使用你每月包含的部分存储空间。 有关详细信息,请参阅“AUTOTITLE”。

预生成过程

要创建预生成,请设置预生成配置。 保存配置时,将运行 GitHub Actions 工作流以创建每个所需的预生成;每个预生成一个工作流。 每当需要更新配置的预构建时,工作流也会运行。 在定期间隔、推送到启用预生成的存储库时,或更改开发容器配置时,可能会发生这种情况。 有关详细信息,请参阅“AUTOTITLE”。

运行预生成配置工作流时,GitHub 会创建临时 codespace,从而执行直到 文件中的任何 和 命令(含)的设置操作。 在创建预生成期间不会运行任何 命令。 有关使用这些命令的详细信息,请参阅 VS Code 文档中的 参考。 然后创建并存储生成的容器的快照。

与其他 GitHub Actions 工作流一样,运行预生成配置工作流会占用帐户中包含的一些 GitHub Actions 分钟(如果有),或者会产生 GitHub Actions 分钟的费用。 存储 codespace 预生成的计费方式与存储活动或已停止的 codespace 相同。 有关详细信息,请参阅“AUTOTITLE”。

从预构建环境创建 codespace 时,GitHub 会从存储中下载现有的容器快照,并将其部署到全新的虚拟机上,以完成开发容器配置中指定的剩余命令。 由于已执行许多操作(例如克隆存储库),因此从预生成创建 codespace 可能比在没有预生成的情况下创建 codespace 要快得多。 存储库很大和/或 命令的运行时间很长时会出现这种情况。

关于将更改推送到已启用预生成的分支

默认情况下,每次推送到有预生成配置的分支,都会运行一个 GitHub 托管的 GitHub Actions 工作流来更新预生成。 预生成工作流有一个并发限制,即,对于一个给定的预生成配置,一次只能运行一个工作流,除非进行的更改影响到相关存储库的开发容器配置。 有关详细信息,请参阅“AUTOTITLE”。 如果运行已在进行中,则最近排队的工作流运行将在当前运行完成后运行。

将预生成设置为在每次推送时更新,意味着如果存储库中存在非常频繁的推送,预生成更新将至少与运行预生成工作流所需的频率一样频繁。 也就是说,如果工作流运行通常需要一个小时才能完成且运行成功,那么大约每小时会为存储库创建一次预生成,如果分支上有更改开发容器配置的推送,则创建预生成会更频繁。

例如,假设针对有预生成配置的分支连续进行 5 次推送。 在这种情况下:

  • 在第一次推送中会启动工作流运行,以更新预生成。

  • 如果余下的 4 次推送不会影响开发容器配置,这些工作流运行将以“挂起”状态排队。

    如果余下 4 次推送中的任何一次更改了开发容器配置,服务将不会跳过该推送,并将立即运行预生成创建工作流,运行成功后将相应地更新预生成。

  • 首次工作流运行完成后,将取消第 2、3 和 4 次推送的工作流运行,并运行队列中最后一个工作流(用于第 5 次推送),以更新预生成。