

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 故障診斷 AWS CodeBuild
<a name="troubleshooting"></a>

使用本主題的資訊來協助您查明、診斷和解決問題。若要了解如何記錄和監控 CodeBuild 組建以疑難排解問題，請參閱 [日誌記錄和監控](logging-monitoring.md)。

**Topics**
+ [Apache Maven 建置參考錯誤儲存庫中的成品](#troubleshooting-maven-repos)
+ [建置命令預設以 root 身分執行](#troubleshooting-root-build-commands)
+ [當檔案名稱具有非美國 時，組建可能會失敗。 英文字元](#troubleshooting-utf-8)
+ [從 Amazon EC2 參數存放區取得參數時，組建可能會失敗](#troubleshooting-parameter-store)
+ [無法存取 CodeBuild 主控台中的分支篩選條件](#troubleshooting-webhook-filter)
+ [無法檢視組建成功或失敗](#no-status-when-build-triggered)
+ [未向來源提供者報告建置狀態](#build-status-not-reported)
+ [找不到並選取 Windows Server Core 2019 平台的基礎映像](#windows-image-not-available)
+ [在 Buildspec 檔案中後來的命令無法辨識先前的命令](#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)
+ [錯誤：建立或更新組建專案時，「CodeBuild 無權執行：sts：AssumeRole」](#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)
+ [在代理伺服器中執行 CodeBuild 時發生 RequestError 逾時錯誤](#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)
+ [錯誤：「使用 CodeConnections 建立 CodeBuild 專案時，您的登入資料缺少一或多個必要的權限範圍」 CodeConnections](#troubleshooting-permission-bitbucket)
+ [錯誤：使用 Ubuntu 安裝命令建置時，「很抱歉，完全沒有終端請求 - 無法取得輸入」](#troubleshooting-nvidia-container-toolkit)

## Apache Maven 建置參考錯誤儲存庫中的成品
<a name="troubleshooting-maven-repos"></a>

**問題：**當您搭配 AWS CodeBuild提供的 Java 組建環境使用 Maven 時，Maven 會從位於 https：//[https://repo1.maven.org/maven2](https://repo1.maven.org/maven2) 的安全中央 Maven 儲存庫提取組建和外掛程式相依性。即使組建專案的 `pom.xml` 檔案明確宣告改用其他位置，還是會發生此情況。

**可能原因：**CodeBuild 提供的 Java 建置環境包含一個名為 的檔案`settings.xml`，該檔案預先安裝在建置環境的 `/root/.m2`目錄中。`settings.xml` 檔案包含下列宣告，指示 Maven 一律從位於 [https://repo1.maven.org/maven2](https://repo1.maven.org/maven2) 的安全中央 Maven 儲存庫提取組建和外掛程式相依性。

```
<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`階段，指示 CodeBuild 將您的`settings.xml`檔案複製到建置環境的 `/root/.m2` 目錄。例如，`buildspec.yml` 檔案中有下列程式碼片段示範此行為。

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

## 建置命令預設以 root 身分執行
<a name="troubleshooting-root-build-commands"></a>

**Issue：** AWS CodeBuild 以根使用者身分執行建置命令。即使相關組建映像的 Dockerfile 將 `USER` 指示設為不同使用者，還是會發生此情況。

**原因：**根據預設，CodeBuild 會以根使用者身分執行所有建置命令。

**建議解決方案：**無。

## 當檔案名稱具有非美國 時，組建可能會失敗。 英文字元
<a name="troubleshooting-utf-8"></a>

**問題：**當您執行的組建使用檔案的檔案名稱包含非美國 英文字元 （例如中文字元），建置失敗。

**可能原因：**建置 提供的環境 AWS CodeBuild ，其預設地區設定設為 `POSIX`。`POSIX`地區化設定與 CodeBuild 和包含非美國 的檔案名稱較不相容。 英文字元 和 可能會導致相關組建失敗。

**建議解決方案：**將下列命令新增至 buildspec 檔案的 `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 參數存放區取得參數時，組建可能會失敗
<a name="troubleshooting-parameter-store"></a>

**問題：**當組建嘗試取得存放在 Amazon EC2 參數存放區中的一或多個參數的值時，組建會在 `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 參數存放區中的參數`/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 篩選條件推出之前建立的分支篩選條件，請使用 `HEAD_REF` 篩選條件和規則表達式 `^refs/heads/branchName$` 建立 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 參考*中的 [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 的區域不支援此映像。

 **建議的解決方案：**使用下列 AWS 其中一個支援 Windows Server Core 2019 平台基礎映像的區域：
+ 美國東部 (維吉尼亞北部)
+ 美國東部 (俄亥俄)
+ 美國西部 (奧勒岡)
+ 歐洲 (愛爾蘭)

## 在 Buildspec 檔案中後來的命令無法辨識先前的命令
<a name="troubleshooting-build-spec-commands"></a>

**問題：**Buildspec 檔案中後來的命令無法辨識同一 buildspec 檔案中先前一個或多命令的結果。例如，命令可能設定本機環境變數，但後來執行的命令可能無法取得該本機環境變數的值。

**可能原因：**在 buildspec 檔案 0.1 版中， AWS CodeBuild 會在建置環境的預設 shell 個別執行個體中執行每個命令。這表示每個命令會與所有其他命令隔離執行。所以，根據預設，如果單一命令倚賴任何先前命令的狀態，則無法執行此命令。

**建議的解決方案：**建議您使用建置規格 0.2 版，即可解決此問題。如果您必須使用 Buildspec 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 儲存貯體，CodeBuild 使用的服務角色沒有 `s3:GetObject` 和 `s3:PutObject` 許可。

**建議的解決方案：**第一次使用時，在更新快取組態之後看到此訊息很正常。如果此錯誤持續發生，對於持有快取的 S3 儲存貯體，您應該檢查服務角色是否有 `s3:GetObject` 和 `s3:PutObject` 許可。如需詳細資訊，請參閱《Amazon [ S3 開發人員指南》中的指定 S3 許可](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html)。 *Amazon S3 * 

## 使用自訂建置映像時發生錯誤："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 Elastic Container Registry (Amazon ECR) 提取建置映像的許可。*  
**建議的解決方案：**更新 Amazon ECR 中儲存庫的許可，以便 CodeBuild 可以將自訂建置映像提取到建置環境中。如需更多資訊，請參閱[Amazon ECR 範例](sample-ecr.md)。

***可能原因：**您請求的 Amazon ECR 映像不適用於 AWS 您的帳戶使用的 AWS 區域。*  
**建議的解決方案：**使用與您 AWS 帳戶使用的 Amazon ECR 映像位於相同的 AWS 區域。

***可能原因：**您在沒有公有網際網路存取的 VPC 中使用私有登錄檔。CodeBuild 無法從 VPC 中的私有 IP 地址提取映像。如需詳細資訊，請參閱[具有 CodeBuild AWS Secrets Manager 範例的私有登錄檔](sample-private-registry.md)。*  
**建議的解決方案：**如果您在 VPC 中使用私有登錄檔，請確定 VPC 具有公有網際網路存取。

***可能原因：**如果錯誤訊息包含 "**toomanyrequests**"，且映像是從 Docker Hub 取得，則此錯誤表示已達到 Docker Hub 提取限制。*  
**建議的解決方案：**使用 Docker Hub 私有登錄檔，或從 Amazon ECR 取得您的映像。如需使用私有登錄檔的詳細資訊，請參閱 [具有 CodeBuild AWS Secrets Manager 範例的私有登錄檔](sample-private-registry.md)。如需使用 Amazon ECR 的詳細資訊，請參閱 [CodeBuild 的 Amazon ECR 範例](sample-ecr.md)。

## 錯誤：「完成建置之前，發現建置容器失效。因為記憶體不足，或不支援 Docker 映像，建置容器失效。ErrorCode: 500」
<a name="windows-server-core-version"></a>

 **問題：**當您嘗試在 中使用 Microsoft Windows 或 Linux 容器時 AWS CodeBuild，此錯誤會在 PROVISIONING 階段發生。

 **可能原因：**
+  CodeBuild 不支援容器作業系統版本。
+  在容器中指定 `HTTP_PROXY`、`HTTPS_PROXY`，或兩者都指定。

 **建議解決方案：**
+ 針對 Microsoft Windows，請使用容器作業系統版本為 microsoft/windowsservercore:10.0.x 的 Windows 容器 (例如 microsoft/windowsservercore:10.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. 前往 [https://console.aws.amazon.com/codebuild/](https://console.aws.amazon.com/codebuild/) 開啟 CodeBuild 主控台。

1.  在導覽窗格中，選擇**建置專案**，然後選擇您的建置專案。

1.  從 **Edit (編輯)** 選擇 **Environment (環境)**。

1.  選擇 **Additional configuration (其他組態)**。

1.  在**特權**中，**如果您想要建置 Docker 映像或希望建置獲得更高的權限，請選取啟用此旗標。**

1.  選擇 **Update environment (更新環境)**。

1.  選擇 **Start build (啟動組建)** 來重試組建。

您也需要在容器內啟動 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` 中將 `-t` 引數新增至 `timeout`：  

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

若要進一步了解如何使用 建置和執行 Docker 映像 AWS CodeBuild，請參閱 [CodeBuild 自訂映像範例中的 Docker](sample-docker-custom-image.md)。

## 錯誤：建立或更新組建專案時，「CodeBuild 無權執行：sts：AssumeRole」
<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 的區域 AWS STS 啟用 。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[AWS STS 在 AWS 區域中啟用和停用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) 。
+ 請確定目標 CodeBuild 服務角色存在於您的帳戶中 AWS 。如果您不是使用主控台，請確定您在建立或更新組建專案時沒有拼錯服務角色的 Amazon Resource Name (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 儲存貯體來安裝憑證。

 **建議解決方案：**
+ 編輯您的專案。針對 **Certificate (憑證)**，選擇 **Install certificate from S3 (從 S3 安裝憑證)**。針對 **Bucket of certificate (憑證的儲存貯體)**，選擇存放 SSL 憑證的 S3 儲存貯體。針對 **Object key of certificate (憑證的物件金鑰)**，輸入 S3 物件金鑰的名稱。
+ 編輯您的專案。選取 **Insecure SSL (不安全 SSL)**，忽略連線至 GitHub Enterprise Server 專案儲存庫時出現的 SSL 警告。
**注意**  
建議您只使用 **Insecure 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 或更新版本和未於 buildspec 檔案中指定的執行時間。

**建議的解決方案：**如果您使用 `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 Standard Image 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 地址，也無法將這些 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 網路範圍的基礎加二；但是，我們也會預留每個子網路範圍的基礎加二。針對使用多個 CIDR 區塊的 VPC，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 影像較舊且包含過期的根憑證。

 **建議的解決方案：**更新 AWS CodeBuild 專案中使用的 Docker 映像。如需詳細資訊，請參閱[CodeBuild 提供的 Docker 映像](build-env-ref-available.md)。

## 錯誤：「無法從 S3 下載憑證。AccessDenied」
<a name="troubleshooting-certificate-in-S3"></a>

**問題：**當您嘗試執行建置專案時，建置失敗並出現此錯誤。

 **可能原因：**
+ 您選擇錯誤的 S3 儲存貯體來取得您的憑證。
+ 您為憑證輸入的物件金鑰錯誤。

 **建議解決方案：**
+ 編輯您的專案。針對 **Bucket of certificate (憑證的儲存貯體)**，選擇存放 SSL 憑證的 S3 儲存貯體。
+ 編輯您的專案。針對 **Object key of certificate (憑證的物件金鑰)**，輸入 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 的 SDK：2.4.7
  + 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 .
     ```

## 在代理伺服器中執行 CodeBuild 時發生 RequestError 逾時錯誤
<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 Logs。
+  `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` 來自 Amazon S3。

 **可能原因：**
+ `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 Logs：

  1.  在您的私有子網路路由表中，移除您為了將流向網際網路的流量路由傳送到代理伺服器而新增的規則。如需詳細資訊，請參閱《*Amazon* [VPC 使用者指南》中的在 VPC 中建立子網路](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)。

  1.  建立私有 Amazon S3 端點和 CloudWatch Logs 端點，並將其與 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 shell (`sh`) 不包含在您的建置映像中。CodeBuild `sh` 需要執行建置命令和指令碼。

**建議的解決方案：**如果 `sh`中不存在於建置映像中，請務必在啟動任何其他使用映像的建置之前將其包含。(CodeBuild 已包含在其建置映像`sh`中。)

## 執行建置時出現警告：「正在略過執行時間的安裝。此建置映像不支援執行時間版本選項」
<a name="troubleshooting-skipping-all-runtimes-warning"></a>

**問題：**執行建置時，建置日誌包含此警告。

**可能原因：**您的建置不會使用 Amazon Linux 2 (AL2) 標準映像的 1.0 版或更新版本，或 Ubuntu 標準映像的 2.0 版或更新版本，而且執行時間會在 buildspec 檔案中的 `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，如果存在，則會導致此錯誤。

**建議的解決方案：**將任何具有 金鑰的自訂 IAM 角色標籤變更為`jobId`具有不同的金鑰，例如 `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 儲存貯體的寫入存取。

## 錯誤：「使用 CodeConnections 建立 CodeBuild 專案時，您的登入資料缺少一或多個必要的權限範圍」 CodeConnections
<a name="troubleshooting-permission-bitbucket"></a>

**問題：**使用 CodeConnections 建立 CodeBuild 專案時，您沒有安裝 Bitbucket Webhook 的許可。

**可能原因：**
+ 您的 Bitbucket 帳戶中可能尚未接受新的許可範圍。

**建議解決方案：**
+ 若要接受新的許可，您應該已收到標題為**必要動作 - 適用於 AWS CodeStar 的範圍已由 Bitbucket 傳送變更**的任何電子郵件`notifications-noreply@bitbucket.org`。電子郵件包含連結，可將 Webhook 許可授予您現有的 CodeConnections Bitbucket 應用程式安裝。
+ 如果您找不到電子郵件，您可以透過導覽至 來授予許可`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_tw/codebuild/latest/userguide/images/bitbucket-csc.png)

## 錯誤：使用 Ubuntu 安裝命令建置時，「很抱歉，完全沒有終端請求 - 無法取得輸入」
<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 Container Toolkit。在最新的 CodeBuild 映像版本中，CodeBuild 會在最新和精選的映像`nvidia-container-toolkit`中使用 `ubuntu` 預先安裝`amazonlinux`和設定 Docker。遵循此程序會導致使用 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 程序。