# 对预构建进行故障排除

可以使用预生成来加快 codespace 的创建速度。 本文提供有关预生成的常见问题的故障排除步骤。

有关GitHub Codespaces预构建版本的详细信息，请参阅[预生成 codespaces](/zh/enterprise-cloud@latest/codespaces/prebuilding-your-codespaces)。

## 检查是否从预生成创建 codespace？

创建 codespace 时，可选择要使用的虚拟机类型。 如果该类型的虚拟机有可用的预构建，则其旁边会显示“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-zap" aria-label="zap" role="img"><path d="M9.504.43a1.516 1.516 0 0 1 2.437 1.713L10.415 5.5h2.123c1.57 0 2.346 1.909 1.22 3.004l-7.34 7.142a1.249 1.249 0 0 1-.871.354h-.302a1.25 1.25 0 0 1-1.157-1.723L5.633 10.5H3.462c-1.57 0-2.346-1.909-1.22-3.004L9.503.429Zm1.047 1.074L3.286 8.571A.25.25 0 0 0 3.462 9H6.75a.75.75 0 0 1 .694 1.034l-1.713 4.188 6.982-6.793A.25.25 0 0 0 12.538 7H9.25a.75.75 0 0 1-.683-1.06l2.008-4.418.003-.006a.036.036 0 0 0-.004-.009l-.006-.006-.008-.001c-.003 0-.006.002-.009.004Z"></path></svg> Prebuild ready”。

![可用机器类型的列表的屏幕截图：2 核、4 核、8 核、16 核和 32 核，全部标记为“预建就绪”。](/assets/images/help/codespaces/choose-custom-machine-type.png)

如果 GitHub Codespaces 编辑器首选项设置为“Visual Studio Code for Web”，则如果使用预生成代码空间，则“设置代码空间”页将显示消息“找到预生成代码空间”。

![“设置您的代码空间”页的屏幕截图，包含以下文本：“找到预生成的代码空间。” 下载图像”。](/assets/images/help/codespaces/prebuilt-codespace-found.png)

同样，如果编辑器首选项为“”VS Code，则在创建新的代码空间时，集成终端将包含消息“你位于由存储库的预生成配置定义的预生成代码空间上”。 有关详细信息，请参阅“[为 GitHub Codespaces 设置默认编辑器](/zh/enterprise-cloud@latest/codespaces/setting-your-user-preferences/setting-your-default-editor-for-github-codespaces)”。

创建代码空间后，可以通过在终端中运行以下命令 GitHub CLI 来检查它是否是从预生成创建的：

```shell copy
gh api /user/codespaces/$CODESPACE_NAME --jq .prebuild
```

如果 codespace 是使用预生成创建的，则返回 `true`。

或者，如果未安装 GitHub CLI（`gh`），则可以使用以下命令；如果代码空间是根据预生成创建的，该命令会返回 `createFromPrebuild`：

```shell copy
cat /workspaces/.codespaces/shared/environment-variables.json | jq '.ACTION_NAME'
```

## 检查预生成使用情况

可以在存储库设置的“Codespaces”页中检查存储库是否正在使用预生成。

可通过查看个人或组织帐户的计费数据，检查当前计费周期中的预生成占用的存储空间。 还可以生成使用情况报告，以查看哪些存储库一直在使用预生成。 有关详细信息，请参阅“[查看按流量计费的产品和许可证的使用情况](/zh/enterprise-cloud@latest/billing/how-tos/products/view-productlicense-use)”。

## 有时会丢失“预构建准备就绪”标签

你可能会注意到，有时当你从启用了预构建的分支创建新的代码空间时，在选择机器类型的对话框中不会显示“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-zap" aria-label="zap" role="img"><path d="M9.504.43a1.516 1.516 0 0 1 2.437 1.713L10.415 5.5h2.123c1.57 0 2.346 1.909 1.22 3.004l-7.34 7.142a1.249 1.249 0 0 1-.871.354h-.302a1.25 1.25 0 0 1-1.157-1.723L5.633 10.5H3.462c-1.57 0-2.346-1.909-1.22-3.004L9.503.429Zm1.047 1.074L3.286 8.571A.25.25 0 0 0 3.462 9H6.75a.75.75 0 0 1 .694 1.034l-1.713 4.188 6.982-6.793A.25.25 0 0 0 12.538 7H9.25a.75.75 0 0 1-.683-1.06l2.008-4.418.003-.006a.036.036 0 0 0-.004-.009l-.006-.006-.008-.001c-.003 0-.006.002-.009.004Z"></path></svg> 预构建已就绪”标签。 这意味着预生成当前不可用。

默认情况下，每次推送到启用了预构建的分支时，预构建都会更新。 如果此次推送涉及更改开发容器配置，则在更新期间，“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-zap" aria-label="zap" role="img"><path d="M9.504.43a1.516 1.516 0 0 1 2.437 1.713L10.415 5.5h2.123c1.57 0 2.346 1.909 1.22 3.004l-7.34 7.142a1.249 1.249 0 0 1-.871.354h-.302a1.25 1.25 0 0 1-1.157-1.723L5.633 10.5H3.462c-1.57 0-2.346-1.909-1.22-3.004L9.503.429Zm1.047 1.074L3.286 8.571A.25.25 0 0 0 3.462 9H6.75a.75.75 0 0 1 .694 1.034l-1.713 4.188 6.982-6.793A.25.25 0 0 0 12.538 7H9.25a.75.75 0 0 1-.683-1.06l2.008-4.418.003-.006a.036.036 0 0 0-.004-.009l-.006-.006-.008-.001c-.003 0-.006.002-.009.004Z"></path></svg> 预构建就绪”标签会从机器类型列表中移除。 在此期间，仍然可以在没有预生成环境的情况下创建代码空间。 如果需要，可将预生成设置为仅在对开发容器配置文件进行更改时更新，或仅按自定义计划更新，从而减少预生成不可用于存储库的情况。 有关详细信息，请参阅“[配置预生成](/zh/enterprise-cloud@latest/codespaces/prebuilding-your-codespaces/configuring-prebuilds#configuring-prebuilds)”。

如果你的分支未明确启用预生成，但它是从已启用预生成的分支派生出来的，它仍然可能会从中受益。 但是，如果分支上的开发容器配置已更改，变得与基础分支上的配置不同，则分支上将不再提供预生成。

如果某个分支未显示“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-zap" aria-label="zap" role="img"><path d="M9.504.43a1.516 1.516 0 0 1 2.437 1.713L10.415 5.5h2.123c1.57 0 2.346 1.909 1.22 3.004l-7.34 7.142a1.249 1.249 0 0 1-.871.354h-.302a1.25 1.25 0 0 1-1.157-1.723L5.633 10.5H3.462c-1.57 0-2.346-1.909-1.22-3.004L9.503.429Zm1.047 1.074L3.286 8.571A.25.25 0 0 0 3.462 9H6.75a.75.75 0 0 1 .694 1.034l-1.713 4.188 6.982-6.793A.25.25 0 0 0 12.538 7H9.25a.75.75 0 0 1-.683-1.06l2.008-4.418.003-.006a.036.036 0 0 0-.004-.009l-.006-.006-.008-.001c-.003 0-.006.002-.009.004Z"></path></svg> 预生成就绪”标签，请检查以下事项：

* 确认此分支存在预构建配置。 如果你不是存储库管理员，则需要联系其中一个管理员来确认这一点。
* 确认预生成配置包括你的区域。
* 检查最近是否已将开发容器的配置更改推送到已启用预构建的分支。 如果是这样，则通常必须等到此推送的预生成工作流运行完成，才能再次使用预生成。
* 如果最近未进行任何配置更改，请转到存储库的“ **操作** ”选项卡，单击 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-codespaces" aria-label="codespaces" role="img"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces 工作流列表中的“预生成** ”，并检查分支的预生成工作流是否成功。 如果工作流的最新运行失败，并且其中一个或多个失败的运行包含对开发容器配置的更改，则关联的分支将没有可用的预生成。

## 在使用预生成创建的 codespace 中无法访问某些资源

如果预生成配置的 `devcontainer.json` 配置文件指定需要其他存储库的访问权限，则系统会提示存储库管理员在创建或更新预生成配置时授权这些权限。 如果管理员未授予所有请求的权限，预生成过程以及从此预生成创建的代码空间中可能会出现问题。 即使基于此预生成创建 Codespace 的用户在提示时\_会\_授予所有权限，这一点也成立。

## 失败的预生成工作流运行故障排除

### 提高GitHub Actions支出限额

预构建是使用 GitHub Actions 创建和更新的。 如果已使用所有 GitHub Actions 分钟且已达到支出限制，预生成工作流将失败。 如果发生这种情况，可以增加 GitHub Actions 支出限制，以允许工作流运行。 有关详细信息，请参阅“[设置预算以控制按流量计费的产品的支出](/zh/enterprise-cloud@latest/billing/how-tos/set-up-budgets)”。

### 授予访问权限

如果更新了预生成配置的 `devcontainer.json` 配置文件以指定需要其他存储库的访问权限，并且系统未提示存储库管理员为预生成配置授权这些权限，则预生成工作流可能会失败。 尝试在不进行任何更改的情况下更新预生成配置。 如果单击“更新”显示了授权页面，请检查请求的权限是否合适，如果合适，请授权该请求。 有关详细信息，请参阅 [管理预构建](/zh/enterprise-cloud@latest/codespaces/prebuilding-your-codespaces/managing-prebuilds#editing-a-prebuild-configuration) 和 [管理对代码空间中其他存储库的访问权限](/zh/enterprise-cloud@latest/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces#setting-additional-repository-permissions)。

如果预生成配置的工作流运行失败，则可以在调查时暂时禁用预生成配置。 有关详细信息，请参阅“[管理预构建](/zh/enterprise-cloud@latest/codespaces/prebuilding-your-codespaces/managing-prebuilds#disabling-a-prebuild-configuration)”。

### 防止使用过时的预构建

默认情况下，如果最新的预生成工作流失败，将通过先前使用相同组合的存储库、分支和 `devcontainer.json` 配置文件的预生成来创建新的 codespace。 此行为称为预生成优化。

建议启用预构建优化，因为它有助于确保在最新预构建不可用时，仍可快速创建开发环境。 但如果遇到预生成 codespace 落后于分支当前状态的问题，存储库管理员可以禁用预生成优化。 如果禁用预生成优化，则当最新的预生成工作流失败或当前正在运行时，将在没有预生成的情况下创建存储库、分支和 `devcontainer.json` 文件相关组合的 codespace。

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

2. 在仓库名称下，单击 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-gear" aria-label="gear" role="img"><path d="M8 0a8.2 8.2 0 0 1 .701.031C9.444.095 9.99.645 10.16 1.29l.288 1.107c.018.066.079.158.212.224.231.114.454.243.668.386.123.082.233.09.299.071l1.103-.303c.644-.176 1.392.021 1.82.63.27.385.506.792.704 1.218.315.675.111 1.422-.364 1.891l-.814.806c-.049.048-.098.147-.088.294.016.257.016.515 0 .772-.01.147.038.246.088.294l.814.806c.475.469.679 1.216.364 1.891a7.977 7.977 0 0 1-.704 1.217c-.428.61-1.176.807-1.82.63l-1.102-.302c-.067-.019-.177-.011-.3.071a5.909 5.909 0 0 1-.668.386c-.133.066-.194.158-.211.224l-.29 1.106c-.168.646-.715 1.196-1.458 1.26a8.006 8.006 0 0 1-1.402 0c-.743-.064-1.289-.614-1.458-1.26l-.289-1.106c-.018-.066-.079-.158-.212-.224a5.738 5.738 0 0 1-.668-.386c-.123-.082-.233-.09-.299-.071l-1.103.303c-.644.176-1.392-.021-1.82-.63a8.12 8.12 0 0 1-.704-1.218c-.315-.675-.111-1.422.363-1.891l.815-.806c.05-.048.098-.147.088-.294a6.214 6.214 0 0 1 0-.772c.01-.147-.038-.246-.088-.294l-.815-.806C.635 6.045.431 5.298.746 4.623a7.92 7.92 0 0 1 .704-1.217c.428-.61 1.176-.807 1.82-.63l1.102.302c.067.019.177.011.3-.071.214-.143.437-.272.668-.386.133-.066.194-.158.211-.224l.29-1.106C6.009.645 6.556.095 7.299.03 7.53.01 7.764 0 8 0Zm-.571 1.525c-.036.003-.108.036-.137.146l-.289 1.105c-.147.561-.549.967-.998 1.189-.173.086-.34.183-.5.29-.417.278-.97.423-1.529.27l-1.103-.303c-.109-.03-.175.016-.195.045-.22.312-.412.644-.573.99-.014.031-.021.11.059.19l.815.806c.411.406.562.957.53 1.456a4.709 4.709 0 0 0 0 .582c.032.499-.119 1.05-.53 1.456l-.815.806c-.081.08-.073.159-.059.19.162.346.353.677.573.989.02.03.085.076.195.046l1.102-.303c.56-.153 1.113-.008 1.53.27.161.107.328.204.501.29.447.222.85.629.997 1.189l.289 1.105c.029.109.101.143.137.146a6.6 6.6 0 0 0 1.142 0c.036-.003.108-.036.137-.146l.289-1.105c.147-.561.549-.967.998-1.189.173-.086.34-.183.5-.29.417-.278.97-.423 1.529-.27l1.103.303c.109.029.175-.016.195-.045.22-.313.411-.644.573-.99.014-.031.021-.11-.059-.19l-.815-.806c-.411-.406-.562-.957-.53-1.456a4.709 4.709 0 0 0 0-.582c-.032-.499.119-1.05.53-1.456l.815-.806c.081-.08.073-.159.059-.19a6.464 6.464 0 0 0-.573-.989c-.02-.03-.085-.076-.195-.046l-1.102.303c-.56.153-1.113.008-1.53-.27a4.44 4.44 0 0 0-.501-.29c-.447-.222-.85-.629-.997-1.189l-.289-1.105c-.029-.11-.101-.143-.137-.146a6.6 6.6 0 0 0-1.142 0ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM9.5 8a1.5 1.5 0 1 0-3.001.001A1.5 1.5 0 0 0 9.5 8Z"></path></svg>“Settings”\*\*\*\*。 如果看不到“设置”选项卡，请选择“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-kebab-horizontal" aria-label="kebab horizontal icon" role="img"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg>”下拉菜单，然后单击“设置”。

   ![存储库标头的屏幕截图，其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。](/assets/images/help/repository/repo-actions-settings.png)

3. 在边栏中的“代码、规划和自动化”下， 单击 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-codespaces" aria-label="codespaces" role="img"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces**。

4. 在受影响的预生成配置右侧，选择省略号 (…)，然后单击“编辑” 。

   ![预生成选项下拉列表的屏幕截图，其中突出显示了“编辑”。](/assets/images/help/codespaces/edit-prebuild-configuration.png)

5. 滚动到“编辑配置”页底部，然后单击“显示高级选项”。

   ![预生成配置页底部的屏幕截图。 “显示高级选项”链接以深橙色轮廓突出显示。](/assets/images/help/codespaces/show-advanced-options.png)

6. 如果确定要禁用默认设置，请选择“禁用预生成优化”。

   ![“高级选项”设置的屏幕截图。 已选中标有“禁用预生成优化”的复选框。 下面是“更新”按钮。](/assets/images/help/codespaces/disable-prebuild-optimization.png)

7. 若要保存更改，请单击“更新”。

## 其他阅读材料

* [配置预生成](/zh/enterprise-cloud@latest/codespaces/prebuilding-your-codespaces/configuring-prebuilds)
* [管理预构建](/zh/enterprise-cloud@latest/codespaces/prebuilding-your-codespaces/managing-prebuilds)