跳至主要内容

关于 GitHub Codespaces 预构建

GitHub Codespaces 预构建有助于加快为大型或复杂仓库创建新的 Codespaces 的速度。

谁可以使用此功能?

您可以在仓库的设置中创建和配置预构建。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 时看到机器类型选项列表中的“ 预构建就绪”标签。如果预构建仍在创建中,您将看到“ 预构建正在进行”标签。有关更多信息,请参阅“为仓库创建 Codespace”。

Screenshot of a list of available machine types: 2, 4, 8, 16, and 32 core, all labeled "Prebuild ready."

当您从“您的 Codespaces”页面上的模板创建 Codespace 时,GitHub 可能会自动使用预构建来加快创建速度。有关模板的更多信息,请参阅“从模板创建 Codespace”。

注意:每个创建的预构建都会占用存储空间,这将产生计费费用,或者对于您个人 GitHub 帐户拥有的存储库,将使用您每月包含的存储空间的一部分。有关更多信息,请参阅“关于 GitHub Codespaces 的计费”。

预构建过程

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

当预构建配置工作流运行时,GitHub 会创建一个临时 codespace,执行设置操作,直到并包括 devcontainer.json 文件中的任何 onCreateCommandupdateContentCommand 命令。在创建预构建期间不会运行任何 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)将运行并更新预构建。