

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 故障排除 AWS CodeBuild
<a name="troubleshooting"></a>

使用本主题中的信息来帮助您识别、诊断和解决问题。要了解如何记录和监控 CodeBuild 版本以解决问题，请参阅[日志记录和监控](logging-monitoring.md)。

**Topics**
+ [来自错误存储库的 Apache Maven 构建参考构件](#troubleshooting-maven-repos)
+ [默认情况下，以根用户身份运行构建命令](#troubleshooting-root-build-commands)
+ [当文件名包含非美国英语字符时，构建可能失败](#troubleshooting-utf-8)
+ [当从 Amazon EC2 Parameter Store 获取参数时，构建可能失败](#troubleshooting-parameter-store)
+ [无法在 CodeBuild 控制台中访问分支筛选器](#troubleshooting-webhook-filter)
+ [无法查看构建是成功还是失败](#no-status-when-build-triggered)
+ [未向源提供商报告构建状态](#build-status-not-reported)
+ [无法找到并选择 Windows Server Core 2019 平台的基本映像](#windows-image-not-available)
+ [构建规范文件中的前期命令无法被后续命令识别](#troubleshooting-build-spec-commands)
+ [尝试下载缓存时出现错误：“访问被拒绝”](#troubleshooting-dependency-caching)
+ [使用自定义构建映像时出现错误“BUILD\$1CONTAINER\$1UNABLE\$1TO\$1PULL\$1IMAGE”](#troubleshooting-unable-to-pull-image)
+ [错误：“构建容器在完成构建之前发现已失效。构建容器因内存不足而死亡，或者不支持 Docker 镜像。 ErrorCode: 500 英寸](#windows-server-core-version)
+ [错误：运行构建时出现“无法连接到 Docker 进程守护程序”](#troubleshooting-cannot-connect-to-docker-daemon)
+ [创建或更新构建项目时出现错误：AssumeRole“无权执行：st CodeBuild s:”](#troubleshooting-assume-role)
+ [错误：“调用时出错 GetBucketAcl：要么存储桶所有者已更改，要么服务角色不再有权调用 s3:GetBucketAcl”](#troubleshooting-calling-bucket-error)
+ [运行构建时收到错误：“无法上传构件：arn 无效”](#troubleshooting-output-bucket-different-region)
+ [错误：“Git 克隆失败：无法访问 `'your-repository-URL'`：SSL 证书问题：自签名证书”](#troubleshooting-self-signed-certificate)
+ [运行构建时收到错误：“必须使用指定的终端节点来寻址当前尝试访问的存储桶”](#troubleshooting-input-bucket-different-region)
+ [错误：“此构建映像需要至少选择一个运行时版本。”](#troubleshooting-build-must-specify-runtime)
+ [构建队列中的构建失败时出现错误“QUEUED: INSUFFICIENT\$1SUBNET”](#queued-insufficient-subnet-error)
+ [错误：“无法下载缓存： RequestError：发送请求失败原因是：x509：无法加载系统根目录且未提供根目录”](#troubleshooting-cache-image)
+ [错误：“无法从 S3 下载证书。 AccessDenied”](#troubleshooting-certificate-in-S3)
+ [错误：“找不到凭证”](#troubleshooting-versions)
+ [RequestError CodeBuild 在代理服务器上运行时出现超时错误](#code-request-timeout-error)
+ [bourne shell（sh）必须存在于构建映像中](#troubleshooting-sh-build-images)
+ [警告：“跳过运行时安装。此构建映像不支持运行时版本选择”（在运行构建时出现）](#troubleshooting-skipping-all-runtimes-warning)
+ [错误：打开 CodeBuild 控制台时出现 “无法验证 JobWorker 身份”](#troubleshooting-unable-to-verify-jobworker)
+ [构建启动失败](#troubleshooting-build-failed-to-start)
+ [访问本地缓存版本中的 GitHub 元数据](#troubleshooting-github-metadata)
+ [AccessDenied：报告组的存储桶所有者与 S3 存储桶的所有者不匹配...](#troubleshooting-bucket-owner)
+ [使用以下命令创建 CodeBuild 项目时出现错误：“您的凭证缺少一个或多个必需的权限范围” CodeConnections](#troubleshooting-permission-bitbucket)
+ [错误：使用 Ubuntu 安装命令构建时出现“Sorry, no terminal at all requested - can't get input”](#troubleshooting-nvidia-container-toolkit)

## 来自错误存储库的 Apache Maven 构建参考构件
<a name="troubleshooting-maven-repos"></a>

**问题：**[当你将 Maven 与 AWS CodeBuild提供的 Java 构建环境一起使用时，Maven 会从安全的中央 Maven 存储库中提取构建和插件依赖项，网址为 https://repo1.maven.org/maven2。](https://repo1.maven.org/maven2)即使您构建项目的 `pom.xml` 文件明确声明会改用其他位置，也会发生这种情况。

**可能的原因：** CodeBuild提供的 Java 编译环境中包含一个名为的文件`settings.xml`，该文件已预先安装在构建环境的`/root/.m2`目录中。该 `settings.xml` 文件包含以下声明，这些声明将指示 Maven 始终从安全的 Maven 中央存储库（网址为 [https://repo1.maven.org/maven2](https://repo1.maven.org/maven2)）中提取构建和插件依赖项。

```
<settings>
  <activeProfiles>
    <activeProfile>securecentral</activeProfile>
  </activeProfiles>
  <profiles>
    <profile>
      <id>securecentral</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>
```

**建议的解决方案：**执行以下操作：

1. 向源代码中添加 `settings.xml` 文件。

1. 在此 `settings.xml` 文件中，使用上述 `settings.xml` 格式作为指导，声明您希望 Maven 从哪些存储库中提取构建和插件依赖项。

1. 在构建项目`install`阶段，请指示将`settings.xml`文件复制 CodeBuild 到构建环境的`/root/.m2`目录中。例如，考虑说明此行为的 `buildspec.yml` 文件中的以下代码段。

   ```
   version 0.2
   
   phases:
     install:
       commands:
         - cp ./settings.xml /root/.m2/settings.xml
   ```

## 默认情况下，以根用户身份运行构建命令
<a name="troubleshooting-root-build-commands"></a>

**问题：**以 root 用户身份 AWS CodeBuild 运行您的构建命令。即使您的相关构建映像的 Dockerfile 将 `USER` 指令设置为另一位用户，也会发生这种情况。

**原因：**默认情况下，以 root 用户身份 CodeBuild 运行所有构建命令。

**建议的解决方案：**无。

## 当文件名包含非美国英语字符时，构建可能失败
<a name="troubleshooting-utf-8"></a>

**问题：**当您运行的构建使用的文件的名称包含非美国英语字符（例如，中文字符）时，构建将失败。

**可能的原因：**提供的构建环境 AWS CodeBuild 的默认区域设置为`POSIX`。 `POSIX`本地化设置 CodeBuild 与包含非美国文件名的兼容性较差 英文字符，并可能导致相关构建失败。

**建议的解决方案：**将以下命令添加到构建规范文件的 `pre_build` 部分。这些命令使构建环境使用美式英语 UTF-8 作为其本地化设置，该设置 CodeBuild 与包含非美国英语的文件名更兼容。 英文字符。

对于基于 Ubuntu 的构建环境：

```
pre_build:
  commands:
    - export LC_ALL="en_US.UTF-8"
    - locale-gen en_US en_US.UTF-8
    - dpkg-reconfigure -f noninteractive locales
```

对于基于 Amazon Linux 的构建环境：

```
pre_build:
  commands:
    - export LC_ALL="en_US.utf8"
```

## 当从 Amazon EC2 Parameter Store 获取参数时，构建可能失败
<a name="troubleshooting-parameter-store"></a>

**问题：**当构建尝试获取存储在 Amazon EC2 Parameter Store 中的一个或多个参数的值时，处于 `DOWNLOAD_SOURCE` 阶段的构建将失败并返回错误 `Parameter does not exist`。

**可能的原因：**构建项目所依赖的服务角色无权调用`ssm:GetParameters`操作，或者构建项目使用由生成 AWS CodeBuild 并允许调用`ssm:GetParameters`操作的服务角色，但参数的名称不是以开头的`/CodeBuild/`。

 **建议的解决方案：**
+ 如果服务角色不是由生成的 CodeBuild，请更新其定义 CodeBuild 以允许调用`ssm:GetParameters`操作。例如，以下策略语句允许调用 `ssm:GetParameters` 操作以获取名称以 `/CodeBuild/` 开头的参数：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": "ssm:GetParameters",
              "Effect": "Allow",
              "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/CodeBuild/*"
          }
      ]
  }
  ```

------
+  如果服务角色是由生成的 CodeBuild，请更新其定义以允许 CodeBuild 使用名称以外的名称访问 Amazon EC2 Parameter Store 中的参数`/CodeBuild/`。例如，以下策略语句允许调用 `ssm:GetParameters` 操作以获取具有指定名称的参数：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": "ssm:GetParameters",
              "Effect": "Allow",
              "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/PARAMETER_NAME"
          }
      ]
  }
  ```

------

## 无法在 CodeBuild 控制台中访问分支筛选器
<a name="troubleshooting-webhook-filter"></a>

**问题：**创建或更新 AWS CodeBuild 项目时，控制台中无法使用分支筛选器选项。

 **可能的原因：**分支筛选选项已被弃用。它已被 Webhook 筛选条件组取代，后者可以更好地控制触发新 CodeBuild 中的构建的 Webhook 事件。

**建议的解决方案：**要迁移在引入 Webhook 筛选条件之前创建的分支筛选条件，请使用正则表达式 `^refs/heads/branchName$` 创建带 `HEAD_REF` 筛选条件的 Webhook 筛选条件组。例如，如果您的分支筛选条件正则表达式是 `^branchName$`，那么您放入 `HEAD_REF` 筛选条件的经过更新的正则表达式是 `^refs/heads/branchName$`。有关更多信息，请参阅[Bitbucket Webhook 事件](bitbucket-webhook.md)和[筛选 GitHub webhook 事件（控制台）](github-webhook-events-console.md)。

## 无法查看构建是成功还是失败
<a name="no-status-when-build-triggered"></a>

**问题：**无法查看重试构建是成功还是失败。

**可能的原因：**未启用报告构建状态的选项。

**推荐的解决方案：**在创建或更新 CodeBuild 项目时启用 “**报告构建状态**”。此选项告知 CodeBuild 在触发构建时报告状态。有关更多信息，请参阅《AWS CodeBuild API Reference》**中的 [reportBuildStatus](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html#CodeBuild-Type-ProjectSource-reportBuildStatus)。

## 未向源提供商报告构建状态
<a name="build-status-not-reported"></a>

**问题：**允许向源提供商（例如 GitHub 或 Bitbucket）报告构建状态后，构建状态未更新。

**可能的原因：**与源提供商关联的用户不具备访问存储库的权限。

**建议的解决方案：**为了能够向源提供商报告构建状态，与源提供商关联的用户必须拥有对存储库的写入权限。如果用户没有写入权限，则无法更新构建状态。有关更多信息，请参阅 [源提供商访问权限](access-tokens.md)。

## 无法找到并选择 Windows Server Core 2019 平台的基本映像
<a name="windows-image-not-available"></a>

 **问题：**无法找到或选择 Windows Server Core 2019 平台的基本映像。

 **可能的原因：**您使用的 AWS 区域不支持此图片。

 **建议的解决方案：**使用以下支持 Windows Server Core 2019 平台基本映像的 AWS 区域之一：
+ 美国东部（弗吉尼亚州北部）
+ 美国东部（俄亥俄州）
+ 美国西部（俄勒冈州）
+ 欧洲地区（爱尔兰）

## 构建规范文件中的前期命令无法被后续命令识别
<a name="troubleshooting-build-spec-commands"></a>

**问题：**buildspec 文件中的一个或多个命令的结果无法被同一 buildspec 文件中的后续命令识别。例如，某个命令可能会设置本地环境变量，但稍后运行的命令可能无法获取该本地环境变量的值。

**可能的原因：**在 buildspec 文件版本 0.1 中， AWS CodeBuild 将在构建环境内的默认 Shell 的单独实例中运行每个命令。这表示各个命令独立于其他所有命令而运行。默认情况下，您无法运行依赖于任何先前命令的状态的单个命令。

**建议的解决方案：**建议您使用构建规范版本 0.2，它能解决此问题。如果您必须使用构建规范版本 0.1，建议您使用 Shell 命令链接运算符（例如，Linux 中的 `&&`）将多个命令合并为一个命令。或者，您也可以在源代码中包括一个带有多个命令的 Shell 脚本，然后从 buildspec 文件中的单个命令调用该 Shell 脚本。有关更多信息，请参阅[构建环境中的 Shell 和命令](build-env-ref-cmd.md)和[构建环境中的环境变量](build-env-ref-env-vars.md)。

## 尝试下载缓存时出现错误：“访问被拒绝”
<a name="troubleshooting-dependency-caching"></a>

**问题：**当尝试下载已启用缓存的构建项目上的缓存时，您收到 `Access denied` 错误。

 **可能的原因：**
+ 您刚刚已将缓存配置为您的构建项目的一部分。
+ 最近已通过 `InvalidateProjectCache` API 使缓存失效。
+ 使用的服务角色对`s3:GetObject`存放缓存的 S3 存储桶 CodeBuild 没有`s3:PutObject`权限。

**建议的解决方案：**在首次使用时，在更新缓存配置后立即看到此错误是正常的。如果此错误持续存在，则您应该检查您的服务角色对包含缓存的 S3 存储桶是否具有 `s3:GetObject` 和 `s3:PutObject` 权限。有关更多信息，请参阅《Amazon S3 开发人员指南》**中的[指定 S3 权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html)。

## 使用自定义构建映像时出现错误“BUILD\$1CONTAINER\$1UNABLE\$1TO\$1PULL\$1IMAGE”
<a name="troubleshooting-unable-to-pull-image"></a>

**问题：**当您尝试运行使用自定义构建映像的构建时，构建将失败并返回错误 `BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE`。

***可能的原因：**构建映像的整体未压缩大小大于构建环境计算类型的可用磁盘空间。要检查构建映像的大小，请使用 Docker 运行 `docker images REPOSITORY:TAG` 命令。有关按计算类型分类的可用磁盘空间的列表，请参阅[构建环境计算模式和类型](build-env-ref-compute-types.md)。*  
**建议的解决方案：**对较大的计算类型使用更多的可用磁盘空间，或者减小自定义构建映像的大小。

***可能的原因：** AWS CodeBuild 无权从您的亚马逊弹性容器注册表 (Amazon ECR) Container Registry 中提取构建映像。*  
**推荐的解决方案：**在 Amazon ECR 中更新存储库中的权限，以便 CodeBuild 可以将您的自定义构建映像拉入构建环境中。有关更多信息，请参阅[Amazon ECR 示例](sample-ecr.md)。

***可能的原因：**您请求的 Amazon ECR 图片在您的 AWS 账户使用的 AWS 地区不可用。*  
**推荐的解决方案：**使用与您的 AWS 账户 AWS 所在区域相同的 Amazon ECR 映像。

***可能的原因：**您在无法访问公共互联网的 VPC 中使用私有注册表。 CodeBuild 无法从 VPC 中的私有 IP 地址提取镜像。有关更多信息，请参阅 [带有 AWS Secrets Manager 示例的私有注册表 CodeBuild](sample-private-registry.md)。*  
**建议的解决方案：**如果您在 VPC 中使用私有注册表，请确保 VPC 具有公共互联网访问权限。

***可能的原因：**如果错误消息包含“**toomanyrequests**”，并且映像是从 Docker Hub 获取的，则此错误表示已达到 Docker Hub 的拉取限制。*  
**建议的解决方案：**使用 Docker Hub 私有注册表，或者从 Amazon ECR 获取您的映像。有关使用私有注册表的更多信息，请参阅[带有 AWS Secrets Manager 示例的私有注册表 CodeBuild](sample-private-registry.md)。有关使用 Amazon ECR 的更多信息，请参阅[的亚马逊 ECR 示例 CodeBuild](sample-ecr.md)。

## 错误：“构建容器在完成构建之前发现已失效。构建容器因内存不足而死亡，或者不支持 Docker 镜像。 ErrorCode: 500 英寸
<a name="windows-server-core-version"></a>

 **问题：**当你尝试在中使用微软 Windows 或 Linux 容器时 AWS CodeBuild，此错误发生在配置阶段。

 **可能的原因：**
+  不支持容器操作系统版本 CodeBuild。
+  在容器中指定了 `HTTP_PROXY` 和/或 `HTTPS_PROXY`。

 **建议的解决方案：**
+ 对于微软 Windows，请使用带有容器操作系统的 Windows 容器（版本为:10. microsoft/windowsservercore:10.0.x (for example, microsoft/windowsservercore 0.14393.2125）。
+ 对于 Linux，请在 Docker 映像中清除 `HTTP_PROXY` 和 `HTTPS_PROXY` 设置，或在构建项目中指定 VPC 配置。

## 错误：运行构建时出现“无法连接到 Docker 进程守护程序”
<a name="troubleshooting-cannot-connect-to-docker-daemon"></a>

**问题：**您的构建失败，并在构建日志中收到了类似于 `Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?` 的错误。

**可能的原因：**您未在特权模式下运行构建。

**推荐的解决方案：**要修复此错误，必须启用特权模式并按照以下说明更新 buildspec。

要在特权模式下运行构建，请按照以下步骤操作：

1. 打开 CodeBuild 控制台，网址为[https://console.aws.amazon.com/codebuild/](https://console.aws.amazon.com/codebuild/)。

1.  在导航窗格中选择**构建项目**，然后选择您的构建项目。

1.  从**编辑**中，选择**环境**。

1.  选择**其他配置**。

1.  在**特权**中，选择**如果要构建 Docker 映像或希望您的构建获得提升的特权，请启用此标志**。

1.  选择**更新环境**。

1.  选择**启动构建**来重试您的构建。

您还需要在容器内启动 Docker 进程守护程序。buildspec 的 `install` 阶段可能看上去与以下示例类似：

```
phases:
  install:
    commands:
      - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 &
      - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
```

有关 buildspec 文件中引用的 OverlayFS 存储驱动程序的更多信息，请参阅 Docker 网站上的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/storage/storagedriver/overlayfs-driver/)。

**注意**  
 如果基本操作系统是 Alpine Linux，请在 `buildspec.yml` 中向 `timeout` 添加 `-t` 参数：  

```
- timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
```

要详细了解如何使用构建和运行 Docker 镜像 AWS CodeBuild，请参阅[自定义镜像示例中的 Docker CodeBuild](sample-docker-custom-image.md)。

## 创建或更新构建项目时出现错误：AssumeRole“无权执行：st CodeBuild s:”
<a name="troubleshooting-assume-role"></a>

**问题：**当您尝试创建或更新构建项目时，您会收到错误 `Code:InvalidInputException, Message:CodeBuild is not authorized to perform: sts:AssumeRole on arn:aws:iam::account-ID:role/service-role-name`。

 **可能的原因：**
+ 对于您尝试创建或更新构建项目的 AWS 区域， AWS Security Token Service (AWS STS) 已被停用。
+ 与构建项目关联的 AWS CodeBuild 服务角色不存在或没有足够的信任权限 CodeBuild。
+ 与构建项目关联的 AWS CodeBuild 服务角色大小写与实际的 IAM 角色不匹配。

 **建议的解决方案：**
+ 确保 AWS STS 在您尝试创建或更新构建项目的 AWS 区域处于激活状态。有关更多信息，请参阅 *IAM 用户指南 AWS STS *[中的在 AWS 区域中激活和停用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)。
+ 确保您的 AWS 账户中存在目标 CodeBuild 服务角色。如果您没有使用控制台，请确保在创建或更新构建项目时没有拼错服务角色的 Amazon 资源名称（ARN）。请注意，IAM 角色区分大小写，因此请检查 IAM 角色的大小写是否正确。
+ 确保目标 CodeBuild 服务角色具有足够的信任权限 CodeBuild。有关更多信息，请参阅 [CodeBuild 允许与其他 AWS 服务进行交互](setting-up-service-role.md) 中的信任关系策略声明。

## 错误：“调用时出错 GetBucketAcl：要么存储桶所有者已更改，要么服务角色不再有权调用 s3:GetBucketAcl”
<a name="troubleshooting-calling-bucket-error"></a>

**问题：**运行构建时，您收到一个有关 S3 存储桶所有权更改和 `GetBucketAcl` 权限更改的错误。

**可能的原因：**您将 `s3:GetBucketAcl` 和 `s3:GetBucketLocation` 权限添加到了 IAM 角色。这些权限可保护您项目的 S3 存储桶，并确保只有您可以访问它。添加完这些权限后，S3 存储桶的拥有者会发生更改。

**建议的解决方案：**确认您是 S3 存储桶的拥有者，然后重新将权限添加到您的 IAM 角色。有关更多信息，请参阅 [对 S3 存储桶的安全访问](auth-and-access-control-iam-access-control-identity-based.md#secure-s3-buckets)。

## 运行构建时收到错误：“无法上传构件：arn 无效”
<a name="troubleshooting-output-bucket-different-region"></a>

**问题：**在运行构建时，`UPLOAD_ARTIFACTS` 构建阶段失败并出现错误 `Failed to upload artifacts: Invalid arn`。

**可能的原因：**您的 S3 输出存储桶（ AWS CodeBuild 存储其生成输出的存储桶）位于与 CodeBuild 构建项目不同的 AWS 区域。

**推荐的解决方案：**更新构建项目的设置，使其指向与构建项目位于同一 AWS 区域的输出存储桶。

## 错误：“Git 克隆失败：无法访问 `'your-repository-URL'`：SSL 证书问题：自签名证书”
<a name="troubleshooting-self-signed-certificate"></a>

**问题：** 当您尝试运行构建项目时，构建失败并出现此错误。

 **可能的原因：**您的源存储库具有一个自签名证书，但您在构建项目的过程中未选择从您的 S3 存储桶安装此证书。

 **建议的解决方案：**
+ 编辑您的项目。对于**证书**，选择**从 S3 安装证书**。对于**证书存储桶**，选择存储您的 SSL 证书的 S3 存储桶。对于**证书的对象键**，键入您的 S3 对象键的名称。
+ 编辑您的项目。选择 “**不安全 SSL**” 可在连接到 GitHub 企业服务器项目存储库时忽略 SSL 警告。
**注意**  
建议您仅将**不安全的 SSL** 用于测试。它不应在生产环境中使用。

## 运行构建时收到错误：“必须使用指定的终端节点来寻址当前尝试访问的存储桶”
<a name="troubleshooting-input-bucket-different-region"></a>

**问题：**在运行构建时，`DOWNLOAD_SOURCE` 构建阶段失败并出现错误 `The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint`。

**可能的原因：**您预先构建的源代码存储在 S3 存储桶中，而该存储桶位于与 AWS CodeBuild 构建项目不同的 AWS 区域。

**建议的解决方案：**更新构建项目的设置，以指向包含预构建的源代码的存储桶。确保该存储桶与构建项目位于同一个 AWS 区域。

## 错误：“此构建映像需要至少选择一个运行时版本。”
<a name="troubleshooting-build-must-specify-runtime"></a>

**问题：**在运行构建时，`DOWNLOAD_SOURCE` 构建阶段失败并出现错误 `YAML_FILE_ERROR: This build image requires selecting at least one runtime version`。

**可能的原因：**您的版本使用了 Amazon Linux 2 (AL2) 标准映像的 1.0 或更高版本，或 Ubuntu 标准映像的 2.0 或更高版本，并且在构建规范文件中未指定运行时间。

**推荐的解决方案：**如果您使用`aws/codebuild/standard:2.0` CodeBuild 托管映像，则必须在 buildspec 文件的`runtime-versions`部分中指定运行时版本。例如，您可以对使用 PHP 的项目使用以下 buildspec 文件：

```
version: 0.2

phases:
  install:
    runtime-versions:
        php: 7.3
  build:
    commands:
      - php --version
artifacts:
  files:
    -  README.md
```

**注意**  
 如果您指定分`runtime-versions`区并使用 Ubuntu 标准映像 2.0 或更高版本或 Amazon Linux 2 (AL2) 标准映像 1.0 或更高版本以外的图片，则版本会发出警告 “。” `Skipping install of runtimes. Runtime version selection is not supported by this build image` 

 有关更多信息，请参阅 [Specify runtime versions in the buildspec file](build-spec-ref.md#runtime-versions-buildspec-file)。

## 构建队列中的构建失败时出现错误“QUEUED: INSUFFICIENT\$1SUBNET”
<a name="queued-insufficient-subnet-error"></a>

**问题：**构建队列中的构建失败，出现类似于 `QUEUED: INSUFFICIENT_SUBNET` 的错误。

**可能的原因：**为您的 VPC 指定的 IPv4 CIDR 块使用了保留的 IP 地址。每个子网 CIDR 块中的前四个 IP 地址和最后一个 IP 地址无法供您使用，而且无法分配到一个实例。例如，在具有 CIDR 块 `10.0.0.0/24` 的子网中，以下五个 IP 地址是保留的：
+  `10.0.0.0:`：网络地址。
+  `10.0.0.1`：由 AWS VPC 路由器保留。
+  `10.0.0.2`: 由... 保留 AWS。DNS 服务器的 IP 地址始终为 VPC 网络范围的基址 \$1 2；但是，我们也保留了每个子网范围基址 \$1 2 的 IP 地址。如果 VPCs 有多个 CIDR 块，则 DNS 服务器的 IP 地址位于主 CIDR 中。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [Amazon DNS 服务器](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html#AmazonDNS)。
+  `10.0.0.3`: 由预留 AWS 以备将来使用。
+  `10.0.0.255`：网络广播地址。我们不支持 VPC 中的广播。该地址是预留的。

**建议的解决方案：**检查您的 VPC 是否使用了预留 IP 地址。将任何预留的 IP 地址替换为未预留的 IP 地址。有关更多信息，请参阅《Amazon VPC 用户指南》中的 [VPC 和子网大小调整](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing)。

## 错误：“无法下载缓存： RequestError：发送请求失败原因是：x509：无法加载系统根目录且未提供根目录”
<a name="troubleshooting-cache-image"></a>

**问题：** 当您尝试运行构建项目时，构建失败并出现此错误。

 **可能的原因：**您将缓存配置为您的构建项目的一部分并使用包含过期根证书的较旧 Docker 映像。

 **推荐的解决方案：**更新项目中正在使用的 Docker 镜像。 AWS CodeBuild 有关更多信息，请参阅 [提供的 Docker 镜像 CodeBuild](build-env-ref-available.md)。

## 错误：“无法从 S3 下载证书。 AccessDenied”
<a name="troubleshooting-certificate-in-S3"></a>

**问题：** 当您尝试运行构建项目时，构建失败并出现此错误。

 **可能的原因：**
+ 您选择了错误的证书 S3 存储桶。
+ 您输入了错误的证书对象键。

 **建议的解决方案：**
+ 编辑您的项目。对于**证书存储桶**，选择存储您的 SSL 证书的 S3 存储桶。
+ 编辑您的项目。对于**证书的对象键**，键入您的 S3 对象键的名称。

## 错误：“找不到凭证”
<a name="troubleshooting-versions"></a>

**问题：**当你尝试运行 AWS CLI、使用 AWS SDK 或调用其他类似组件作为构建的一部分时，你会遇到与 AWS CLI、 AWS SDK 或组件直接相关的构建错误。例如，您可能会收到构建错误，如 `Unable to locate credentials`。

 **可能的原因：**
+ 编译环境中 AWS CLI、 AWS SDK 或组件的版本与不兼容 AWS CodeBuild。
+ 您在使用 Docker 的构建环境中运行 Docker 容器，默认情况下，该容器无权访问 AWS 凭证。

 **建议的解决方案：**
+ 确保您的构建环境具有以下版本或更高版本的 AWS CLI、 AWS SDK 或组件。
  + AWS CLI：1.10.47
  + AWS 适用于 C\$1\$1 的 SDK：0.2.19
  + AWS 适用于 Go 的 SDK：1.2.5
  + AWS 适用于 Java 的 SDK：1.11.16
  + AWS 适用于 JavaScript：2.4.7 的 SDK
  + AWS 适用于 PHP 的 SDK：3.18.28
  + AWS 适用于 Python 的 SDK (Boto3)：1.4.0
  + AWS 适用于 Ruby 的 SDK：2.3.22
  + Botocore：1.4.37
  + CoreCLR：3.2.6-beta
  + Node.js：2.4.7
+ 如果您需要在构建环境中运行 Docker 容器，并且该容器需要 AWS 证书，则必须将证书从构建环境传递到容器。在您的 buildspec 文件中，包含与以下内容类似的 Docker `run` 命令。此示例使用 `aws s3 ls` 命令列出您的可用 S3 存储桶。该`-e`选项会传递容器访问 AWS 证书所需的环境变量。

  ```
  docker run -e AWS_DEFAULT_REGION -e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI your-image-tag aws s3 ls
  ```
+ 如果您正在构建 Docker 映像，并且构建需要 AWS 证书（例如，从 Amazon S3 下载文件），则必须按如下方式将构建环境中的证书传递到 Docker 构建过程。

  1. 在您的源代码的用于 Docker 映像的 Dockerfile 中，指定以下 `ARG` 指令。

     ```
     ARG AWS_DEFAULT_REGION
     ARG AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
     ```

  1. 在您的 buildspec 文件中，包含与以下内容类似的 Docker `build` 命令。这些`--build-arg`选项设置了 Docker 构建过程访问 AWS 凭证所需的环境变量。

     ```
     docker build --build-arg AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION --build-arg AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI -t your-image-tag .
     ```

## RequestError CodeBuild 在代理服务器上运行时出现超时错误
<a name="code-request-timeout-error"></a>

 **问题：**您收到类似于以下内容的 `RequestError` 错误：
+  `RequestError: send request failed caused by: Post https://logs.<your-region>.amazonaws.com/: dial tcp 52.46.158.105:443: i/o timeout`来自 CloudWatch 日志。
+  Amazon S3 中的 `Error uploading artifacts: RequestError: send request failed caused by: Put https://your-bucket.s3.your-aws-region.amazonaws.com/*: dial tcp 52.219.96.208:443: connect: connection refused`。

 **可能的原因：**
+ `ssl-bump` 未正确配置。
+ 贵组织的安全策略不允许您使用 `ssl_bump`。
+  您的 buildspec 文件没有使用 `proxy` 元素指定的代理设置。

**建议的解决方案：**
+ 确保 `ssl-bump` 已正确配置。如果您对代理服务器使用 Squid，请参阅[将 Squid 配置为显式代理服务器](run-codebuild-in-explicit-proxy-server.md#use-proxy-server-explicit-squid-configure)。
+ 请按照以下步骤使用 Amazon S3 和 CloudWatch 日志的私有终端节点：

  1.  在您的私有子网路由表中，删除您添加的、将发往互联网的流量路由到您的代理服务器的规则。有关信息，请参阅《Amazon VPC 用户指南》**中的[在 VPC 中创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)。

  1.  创建私有 Amazon S3 终端节点和 CloudWatch 日志终端节点，并将它们与您的 Amazon VPC 的私有子网关联。有关信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 端点服务](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html)。

  1.  确认已选中 Amazon VPC 中的**启用私有 DNS 名称**。有关更多信息，请参阅《Amazon VPC 用户指南》中的[创建接口端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint) 
+  如果您不将 `ssl-bump` 用于显式代理服务器，请使用 `proxy` 元素将代理配置添加到您的 buildspec 文件。有关更多信息，请参阅[CodeBuild 在显式代理服务器中运行](run-codebuild-in-explicit-proxy-server.md)和[buildspec 语法](build-spec-ref.md#build-spec-ref-syntax)。

  ```
  version: 0.2
  proxy:
    upload-artifacts: yes
    logs: yes
  phases:
    build:
      commands:
  ```

## bourne shell（sh）必须存在于构建映像中
<a name="troubleshooting-sh-build-images"></a>

**问题：**您使用的构建映像不是由提供的 AWS CodeBuild，并且您的构建失败并显示消息`Build container found dead before completing the build`。

**可能的原因：**Bourne 外壳 (`sh`) 未包含在您的构建镜像中。 CodeBuild `sh`需要运行构建命令和脚本。

**推荐的解决方案：**如果您的构建映像`sh`中没有，请务必在开始使用您的映像的更多构建之前将其包含在内。 （CodeBuild 已包含`sh`在其构建镜像中。）

## 警告：“跳过运行时安装。此构建映像不支持运行时版本选择”（在运行构建时出现）
<a name="troubleshooting-skipping-all-runtimes-warning"></a>

**问题：**在运行构建时，构建日志包含此警告。

**可能的原因：**您的版本未使用版本 1.0 或更高版本的 Amazon Linux 2 (AL2) 标准映像，也未使用 Ubuntu 标准映像的 2.0 或更高版本，并且在构建规范文件的某个`runtime-versions`部分中指定了运行时间。

**建议的解决方案：**确保 buildspec 文件不包含 `runtime-versions` 部分。只有当您使用 Amazon Linux 2 (AL2) 标准映像或更高版本或 Ubuntu 标准映像版本 2.0 或更高版本时，才需要此`runtime-versions`部分。

## 错误：打开 CodeBuild 控制台时出现 “无法验证 JobWorker 身份”
<a name="troubleshooting-unable-to-verify-jobworker"></a>

**问题：**打开 CodeBuild 控制台时，会显示 “无法验证 JobWorker 身份” 错误消息。

**可能的原因：**用于控制台访问的 IAM 角色的标签以 `jobId` 作为键。此标签密钥是为之保留的 CodeBuild ，如果存在则会导致此错误。

**建议的解决方案：**将任何具有 `jobId` 键的自定义 IAM 角色标签更改为具有其他键，例如 `jobIdentifier`。

## 构建启动失败
<a name="troubleshooting-build-failed-to-start"></a>

**问题：**启动构建时，您会收到**构建启动失败**错误消息。

**可能的原因：**已达到并发构建的数量。

**建议的解决方案：**等到其他构建完成，或者增加项目的并发构建限制，然后重新启动构建。有关更多信息，请参阅 [项目配置](create-project.md#create-project-console-project-config)。

## 访问本地缓存版本中的 GitHub 元数据
<a name="troubleshooting-github-metadata"></a>

**问题：**在某些情况下，缓存构建中的 .git 目录是文本文件，而不是目录。

**可能的原因：**为版本启用本地源代码缓存后， CodeBuild 会为该`.git`目录创建一个 gitlink。这意味着该 `.git` 目录实际上是一个包含目录路径的文本文件。

**建议的解决方案：**在所有情况下，都使用以下命令获取 Git 元数据目录。无论 `.git` 采用何种格式，此命令都将起作用：

```
git rev-parse --git-dir
```

## AccessDenied：报告组的存储桶所有者与 S3 存储桶的所有者不匹配...
<a name="troubleshooting-bucket-owner"></a>

**问题：**将测试数据上传到 Amazon S3 存储桶 CodeBuild 时，无法将测试数据写入存储桶。

**可能的原因：**
+ 为报告组存储桶所有者指定的账户与 Amazon S3 存储桶的所有者不匹配。
+ 服务角色不具备写入存储桶的权限。

**建议的解决方案：**
+ 更改报告组存储桶所有者，使其与 Amazon S3 存储桶所有者匹配。
+ 修改服务角色来提供写入 Amazon S3 存储桶的权限。

## 使用以下命令创建 CodeBuild 项目时出现错误：“您的凭证缺少一个或多个必需的权限范围” CodeConnections
<a name="troubleshooting-permission-bitbucket"></a>

**问题：**使用创建 CodeBuild 项目时 CodeConnections，您无权安装 Bitbucket webhook。

**可能的原因：**
+ 您的 Bitbucket 账户可能尚未接受新的权限范围。

**建议的解决方案：**
+ 要接受新权限，您应该已收到 Bitbucket 发送的所有主题为 “**需要操作——范围 AWS CodeStar 已更改**” 的电子邮件。`notifications-noreply@bitbucket.org`该电子邮件包含一个链接，用于向您现有 B CodeConnections itbucket 应用程序安装授予 webhook 权限。
+ 如果您找不到该电子邮件，则可以通过导航到 `https://bitbucket.org/site/addons/reauthorize?account=<workspace-name>&addon_key=aws-codestar` 或 `https://bitbucket.org/site/addons/reauthorize?addon_key=aws-codestar`，并选择要向 webhook 授予相关权限的工作区来授予权限。  
![\[向 webhook 授予对工作区的权限。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/bitbucket-csc.png)

## 错误：使用 Ubuntu 安装命令构建时出现“Sorry, no terminal at all requested - can't get input”
<a name="troubleshooting-nvidia-container-toolkit"></a>

**问题：**如果您正在运行 GPU 容器有特权的构建，则可能要按照以下[过程](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt)安装 NVIDIA 容器工具包。在最新版本的 CodeBuild 镜像中，使用最新的`amazonlinux`精选镜像 CodeBuild 预安装和配置 d `nvidia-container-toolkit` ocker。`ubuntu`按照此过程操作将导致使用 Ubuntu 安装命令进行构建时失败，并出现以下错误：

```
Running command curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor --no-tty -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
gpg: Sorry, no terminal at all requested - can't get input
curl: (23) Failed writing body
```

**可能的原因：**gpg 键已存在于同一位置。

**建议的解决方案：**映像中已安装了 `nvidia-container-toolkit`。如果您看到这个错误，则可以跳过安装并在 buildspec 中重启 docker 进程。