Skip to main content

配置预生成

可以配置项目,使其在你每次将更改推送到存储库时自动预生成 codespace。

谁可以使用此功能?

People with admin access to a repository can configure prebuilds for the repository.

GitHub Codespaces 的存储库级设置适用于个人帐户拥有的所有存储库。

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

可以为存储库的特定分支与特定开发容器配置文件的组合设置预生成配置。

从启用预生成的父分支创建的所有分支通常也会获得同一开发容器配置的预生成。 这是因为使用父分支所用开发容器配置的子分支的预生成在大多数情况下是相同的,因此可以帮助开发人员从这些分支更快地创建 codespace。 请参阅“开发容器简介”。

通常,如果为分支配置预生成,预生成可用于多种计算机类型。 但是,如果存储库大于 32 GB,预生成就不适用于 2 核和 4 核计算机类型,因为这些计算机类型提供的存储限制为 32 GB。

先决条件

预生成是使用 GitHub Actions 创建的。 因此,必须在要为其配置预生成的存储库中启用 GitHub Actions。 请参阅“管理存储库的 GitHub Actions 设置”。

可以在个人帐户拥有的任何存储库中设置预生成。 预生成将占用存储空间,这会产生可计费费用,或对于个人帐户拥有的存储库,这将使用每月包含的存储空间的一部分。

注意:如果为分支存储库创建预生成,则这些预生成的存储成本将从每月包含的存储中减去(如有)。 如果已使用完所有包含的存储,并且已设置计费,则会对个人帐户进行收费。 即使为分支创建的 codespace 是由拥有父存储库的组织支付,也是如此。请参阅“关于 GitHub Codespaces 的计费”。

对于组织拥有的存储库,如果组织已加入 GitHub Team 或 GitHub Enterprise 计划,则可以设置预生成。 此外,必须在组织帐户或其父企业上添加付款方式并为 GitHub Codespaces 设置支出限制。 请参阅“管理 GitHub Codespaces 的支出限制”和“GitHub 的计划”。

配置预生成

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

  3. 在边栏的“代码和自动化”部分,单击“ Codespaces”。

  4. 在页面的“预生成配置”部分,单击“设置预生成”。

    “Codespaces”设置页的“预生成配置”部分的屏幕截图,其中显示了“设置预生成”按钮。

  5. 选择要为其设置预生成的分支。

    预生成“配置”设置的屏幕截图,其中包含列出了可供选择的分支的下拉菜单。 当前已选择主分支。

    注意:从启用预生成的基础映像分支创建的所有分支通常也会获得同一开发容器配置的预生成。 例如,如果在存储库的默认分支上为开发容器配置文件启用预生成,则大多数情况下,基于默认分支的分支也会获得同一开发容器配置的预生成。

  6. 根据需要,可以在显示的“配置文件”下拉菜单中选择要用于预生成的 devcontainer.json 配置文件。 请参阅“开发容器简介”。

    配置文件下拉菜单的屏幕截图。 列出了四个配置文件,其中当前已选择“.devcontainer/devcontainer.json”。

  7. 选择要如何自动触发预生成更新。

    • 每次推送(默认设置)- 通过此设置,预生成将在每次对给定分支进行推送时更新。 这可确保从预生成生成的 codespace 始终包含最新的 codespace 配置,包括任何最近添加或更新的依赖项。

    • 配置更改时 - 借助此设置,更改以下任何文件时都会更新预生成:

      • .devcontainer/devcontainer.json

        注意.devcontainer 的子目录中的 devcontainer.json 文件更改不会触发预生成更新。

      • .devcontainer/devcontainer.json 文件的 build.dockerfile 属性中引用的 Dockerfile。

      此设置可确保在从预生成生成 codespace 时使用对存储库的开发容器配置文件进行的更改。 更新预生成的 GitHub Actions 工作流的运行频率较低,因此此选项使用的 GitHub Actions 分钟数较少。 但是,此选项不保证 codespace 始终包含最近添加或更新的依赖项,因此在创建 codespace 后可能需要手动添加或更新这些依赖项。

    • 计划 - 使用此设置,可以根据你定义的自定义计划更新预生成。 这可以减少 GitHub Actions 分钟数消耗,但是,使用此选项,可以创建 codespace,而不使用最新的开发容器配置更改。

    “预生成触发器”设置的屏幕截图。 选择“计划”选项,并将其设置为“每天”“下午 1 点”和“下午 3:30”。

  8. 根据需要,可以选择“减少仅对特定区域可用的预生成”,以便仅在指定区域中创建预生成。 选择要在其中提供预生成的区域。

    默认情况下,预生成在所有可用区域中创建,每个预生成都会产生存储费用。

    “区域可用性”设置的屏幕截图。 选择了“减少仅对特定区域可用的预生成”,其中选择了两个区域。

    注释

  9. 根据需要,可以在“模板历史记录”下设置要保留的预生成模板版本数。 可以输入介于 1 和 5 之间的任意数字。 默认保存的版本数为 2,这意味着只保存最新版本的和上一个版本的预生成。

    “模板历史记录”设置的屏幕截图。 将其设置为 2 个版本。

    根据预生成触发器设置,预生成可能会随每个推送或每个开发容器配置的更改而更改。 保留较旧版本的预生成使你能够使用与当前预生成不同的开发容器配置从较旧的提交创建预生成。 通过此设置可将保留的版本数设置为所需的级别。

    如果将保存的预生成版本数设置为 1,GitHub Codespaces 将仅保存最新版本的预生成,并在每次模板更新时删除旧版本。 这意味着,如果返回到较旧的开发容器配置,则不会获取预生成的 codespace。

    保留的每个预生成版本都需支付存储费用。 例如,如果要在 4 个区域中生成预生成并保留 2 个版本,则最多需要支付 8 个预生成的存储费用。 请参阅“关于 GitHub Codespaces 的计费”。

  10. 根据需要,可以添加用户或团队,以便在此配置的预生成工作流运行失败时发出通知。 可以开始键入用户名、团队名称或全名,然后在显示名称后单击该名称以将其添加到列表中。 发生预生成失败时,添加的用户或团队将收到电子邮件,其中包含工作流运行日志链接,以帮助进一步调查。

    “失败通知”设置的屏幕截图。 已添加名为“octocat-team”的团队。

    注意:如果用户在其个人设置中启用了针对失败的 Actions 工作流的通知,则仅会收到关于预生成失败的通知。 请参阅“配置通知”。

  11. 根据需要,单击页面底部的“显示高级选项”。

    预生成配置页底部的屏幕截图。 “显示高级选项”链接以深橙色边框突出显示。

    在“高级选项”部分中,如果选择“禁用预生成优化”,则当最新的预生成工作流失败或当前正在运行时,将在没有预生成的情况下创建 codespace。 请参阅“对预生成进行故障排除”。

  12. 单击“创建”。

    如果存储库的开发容器配置指定了访问其他存储库的权限,你将看到一个授权页面。 有关 devcontainer.json 文件中如何指定此内容的详细信息,请参阅“管理对代码空间中其他存储库的访问权限”。

    单击 查看请求权限的详细信息。

    预生成配置的授权页的屏幕截图。 此请求中列出了三种权限。

    单击“授权并继续”,授予这些权限来创建预生成。 另外,可以单击“在未经授权的情况下继续”,但如果这样做,从生成的预生成创建的 codespace 可能无法正常工作。

    注意:使用此预生成创建 Codespaces 的用户也需要授予这些权限。

创建预生成配置后,它会列在存储库设置的 GitHub Codespaces 页面中。 GitHub Actions 工作流已排队,然后会运行,从而根据所选分支和开发容器配置文件在指定的区域中创建预生成。

预生成配置列表的屏幕截图。 其中列出了一个预生成,标记为“当前正在运行”。 右侧是“查看输出”按钮。

有关编辑和删除预生成配置的信息,请参阅“管理预生成”。

配置环境变量

若要让预生成过程能够访问创建开发环境所需的环境变量,可将这些变量设置为 Codespaces 存储库机密或为 Codespaces 组织机密。 以这种方式创建的机密将由从该存储库创建 codespace 的任何人访问。 请参阅“管理存储库或组织的开发环境机密”。

预生成在生成环境时不会使用任何用户级机密,因为这些机密在创建 codespace 后才会可用。

配置预生成中包含的耗时任务

可以在 devcontainer.json 中使用 onCreateCommandupdateContentCommand 命令,以将耗时过程作为预生成创建的一部分。 请参阅 Visual Studio Code 文档“devcontainer.json 参考”。

onCreateCommand 只在创建预生成时运行一次,而 updateContentCommand 在预生成创建和预生成后续更新时运行。 增量生成应包含在 updateContentCommand 中,因为它们代表项目的源,并且需要包含在每次预生成更新中。

延伸阅读