AWS CodeBuild 疑難排解 - AWS CodeBuild
Apache Maven 建置參考錯誤儲存庫中的成品建置命令預設以 root 身分執行檔案名稱包含非美式英文字元時, 建置可能失敗建置從 Amazon EC2 參數存放區獲取參數時可能失敗無法在 CodeBuild 台存取分支篩選條件 無法檢視組建成功或失敗 構建狀態未報告給源提供程序找不到並選取 Windows Server Core 2019 平台的基本映像 在 Buildspec 檔案中後來的命令無法辨識先前的命令錯誤:嘗試下載緩存時發生「存取遭拒」錯誤:使用自訂組建映像時發生「BUILD_CONTAINER_UNABLE_TO_PULLL_IMAGE」 錯誤:建置容器在完成建置之前發現失效。因為記憶體不足,或不支援 Docker 映像,建置容器失效。ErrorCode: 500 英寸 錯誤:執行建置時「無法連接到 Docker 守護程序」錯誤:建立或更新建置專案時,「代碼建置未獲授權執行:STS: AssumeRole」 錯誤:「調用 GetBucketAcl:儲存貯體擁有者已變更,或服務角色不再有權呼叫 S3: GetBucketAsc」 錯誤:「上傳工件失敗:執行建置時無效的 arn」錯誤:「Git 克隆失敗:無法存取'your-repository-URL':SSL 憑證問題:自我簽署的憑證」錯誤:執行建置時,「必須使用指定的端點來定址您嘗試存取的儲存貯體」錯誤:「政策的預設版本不是由增強型零點擊角色建立所建立,或不是增強型零點擊角色建立所建立的最新版本。」錯誤:「此建置映像需要選取至少一個執行時間版本。」錯誤:「已排入列的位置:建置隊列中的建置失敗時錯誤:無法下載緩存:RequestError:發送請求失敗,原因是:x509:無法加載系統根目錄並且未提供根」錯誤:「無法從 S3 下載憑證。AccessDenied」錯誤:無法找到憑證 在代理服務器中執行代 CodeBuild 時發生 RequestErrorBourne Shell (sh) 必須存在於建置映像中警告:執行建置時,「跳過執行時間安裝。此組建映像不支援執行時間版本選項」錯誤:「無法驗證作業工作人員身份」無法啟動訪問本地緩存的構建中的 GitHub 元數據AccessDenied:報告組的儲存貯體擁有者與 S3 儲存貯體的擁有者不相符...

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

AWS CodeBuild 疑難排解

使用本主題的資訊來協助您查明、診斷和解決問題。若要瞭解如何記錄和監視 CodeBuild 組建以解決問題,請參記錄和監控

主題

Apache Maven 建置參考錯誤儲存庫中的成品

問題:當您將 Maven 與AWS CodeBuild提供的 Java 建置環境,Maven 會從位於https://repo1.maven.org/maven2。即使組建專案的 pom.xml 檔案明確宣告改用其他位置,還是會發生此情況。

可能原因:代碼建置提供的 Java 建置環境包含名為settings.xml預安裝在構建環境的/root/.m2目錄。settings.xml 檔案包含下列宣告,指示 Maven 一律從位於 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 檔案新增至您的原始碼。

  2. 在此 settings.xml 檔案中,將先前的 settings.xml 格式當作指南,宣告您希望 Maven 改以從哪些儲存庫中提取組建和外掛程式相依性。

  3. 在 中install階段,指示 CodeBuild 將您的settings.xml文件添加到構建環境的/root/.m2目錄。例如,buildspec.yml 檔案中有下列程式碼片段示範此行為。

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

建置命令預設以 root 身分執行

問題:AWS CodeBuild 以超級使用者的身分執行您的建置命令。即使相關組建映像的 Dockerfile 將 USER 指示設為不同使用者,還是會發生此情況。

原因:默認情況下,CodeBuild 以超級使用者的身分執行所有建置命令。

建議解決方案:無。

檔案名稱包含非美式英文字元時, 建置可能失敗

問題:當您執行使用含有包含非美式英文字元 (例如中文字元) 之檔案名稱的檔案的建置時,建置則會失敗。

可能原因:構建由AWS CodeBuild將其默認區域設置設置為POSIXPOSIX與 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 locales

對於基於 Amazon Linux 的組建環境:

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

建置從 Amazon EC2 參數存放區獲取參數時可能失敗

問題:當建置嘗試取得存放於 Amazon EC2 參數存放區的一個或多個參數的值時,建置在DOWNLOAD_SOURCE階段與錯誤Parameter does not exist

可能原因:構建項目所依賴的服務角色無權調用ssm:GetParameters操作或建置專案使用由AWS CodeBuild並允許調用ssm:GetParameters操作,但參數的名稱不以/CodeBuild/

建議解決方案:

  • 如果服務角色不是由 CodeBuild 產生,請更新其定義來允許 CodeBuild 在ssm:GetParameters動作。例如,下列政策陳述式允許呼叫 ssm:GetParameters 動作,以取得名稱開頭為 /CodeBuild/ 的參數:

    { "Version": "2012-10-17", "Statement": [ { "Action": "ssm:GetParameters", "Effect": "Allow", "Resource": "arn:aws:ssm:REGION_ID:ACCOUNT_ID:parameter/CodeBuild/*" } ] }
  • 如果服務角色是由 CodeBuild 產生,請更新其定義來允許 CodeBuild 來存取 Amazon EC2 參數存放區中名稱開頭不是/CodeBuild/。例如,下列政策陳述式允許呼叫 ssm:GetParameters 動作,以取得指定名稱的參數:

    { "Version": "2012-10-17", "Statement": [ { "Action": "ssm:GetParameters", "Effect": "Allow", "Resource": "arn:aws:ssm:REGION_ID:ACCOUNT_ID:parameter/PARAMETER_NAME" } ] }

無法在 CodeBuild 台存取分支篩選條件

問題:當您建立或更新AWS CodeBuild專案。

可能原因:不建議使用分支篩選選項。它已由 Webhook 篩選組取代,可更精確控制哪些 Webhook 事件會在 CodeBuild 中觸發新的建置。

建議解決方案:若要遷移在 Webhook 篩選條件推出之前建立的分支篩選條件,請使用HEAD_REF過濾器使用正則表達式^refs/heads/branchName$。例如,如果分支篩選條件規則表達式為 ^branchName$,則您放在 HEAD_REF 篩選條件中已更新的規則表達式為 ^refs/heads/branchName$。如需詳細資訊,請參閱 Bitbucket Webhook 事件篩選 GitHub Webhook 事件 (主控台)

無法檢視組建成功或失敗

問題:您看不到重試的建置是成功或失敗。

可能原因:未啟用報告您的建置狀態的選項。

建議解決方案:啟用報告建置狀態創建或更新 CodeBuild 項目時。此選項告知 CodeBuild 在您觸發建置時回報狀態。如需詳細資訊,請參閱「」reportBuildStatus中的AWS CodeBuildAPI 參考

構建狀態未報告給源提供程序

問題:允許向源提供程序(如 GitHub 或 Bitbucket)報告構建狀態後,構建狀態不會更新。

可能原因:與源提供程序關聯的用户沒有對回購的寫入訪問權限。

建議解決方案:為了能夠向源提供程序報告構建狀態,與源提供程序關聯的用户必須具有對該回購的寫入訪問權限。如果用户沒有寫入訪問權限,則無法更新構建狀態。如需詳細資訊,請參閱 來源供應商存取

找不到並選取 Windows Server Core 2019 平台的基本映像

問題:您找不到或無法選取 Windows Server Core 2019 平台的基本映像。

可能原因:您正在使用AWS不支援這個映像的區域。

建議解決方案:請使用下列其中一個AWS其中支援 Windows Server Core 2019 平台基本映像的區域:

  • 美國東部 (維吉尼亞北部)

  • 美國東部 (俄亥俄)

  • 美國西部 (奧勒岡)

  • 歐洲 (愛爾蘭)

在 Buildspec 檔案中後來的命令無法辨識先前的命令

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

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

建議解決方案:建議您使用建置規格 0.2 版,即可解決此問題。如果您必須使用 Buildspec 0.1 版,建議使用 Shell 命令鏈結運算子 (例如 Linux 中的 &&),將多個命令合併成單一命令。或者,在您的原始碼中加進含有多個命令的 shell 指令碼,然後在 buildspec 檔案中從單一命令呼叫該 shell 指令碼。如需詳細資訊,請參閱 建置環境中的 Shell 和命令建置環境中的環境變數

錯誤:嘗試下載緩存時發生「存取遭拒」

問題:在已啟用快取的建置專案上嘗試下載快取時,您會收到Access denied錯誤。

可能原因:

  • 您剛在組建專案中設定快取。

  • 快取最近才透過 InvalidateProjectCache API 而變成失效。

  • 對於持有快取的 S3 儲存貯體,CodeBuild 使用的服務角色沒有 s3:GetObjects3:PutObject 許可。

建議解決方案:第一次使用時,在更新快取組態之後看到此訊息很正常。如果此錯誤持續發生,對於持有快取的 S3 儲存貯體,您應該檢查服務角色是否有 s3:GetObjects3:PutObject 許可。如需詳細資訊,請參閱「」指定 S3 權限中的Amazon S3 開發人員指南

錯誤:使用自訂組建映像時發生「BUILD_CONTAINER_UNABLE_TO_PULLL_IMAGE」

問題:當您嘗試執行使用自訂建置映像的建置時,建置失敗,發生錯誤BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE

可能原因:組建映像的未壓縮總大小超過組建環境運算類型的可用磁碟空間。若要查看您的建置映像的大小,請使用 Docker 執行 docker images REPOSITORY:TAG 命令。如需依運算類型列出的可用磁碟空間清單,請參閱建置環境運算類型

建議解決方案:使用具有更多可用磁碟空間的較大運算類型,或縮小您的自訂組建映像。

可能原因: AWS CodeBuild未獲許可從您的 Amazon Elastic Container Registry (Amazon ECR) 提取組建映像。

建議解決方案:在 Amazon ECR 中更新您的儲存庫中的許可,讓 CodeBuild 能夠將自訂建置映像提取到建置環境。如需詳細資訊,請參閱 Amazon ECR 示例

可能原因:您請求的卓越亞馬遜 ECR 映像不在AWS您的地區AWS帳户正在使用。

建議解決方案:使用相同的亞馬遜 ECR 圖片AWS區域作為一個你AWS帳户正在使用。

可能原因:您正在沒有公有網際網路存取權的 VPC 中使用私有登錄檔。CodeBuild 置無法提取 VPC 中私有 IP 地址的映像。如需詳細資訊,請參閱 私有登錄檔AWS Secrets ManagerCodeBuild 範例

建議解決方案:如果您在 VPC 中使用私有登錄檔,請確定 VPC 具備公有網際網路存取權。

可能原因:如果錯誤訊息包含」toomanyrequests」,並且圖像是從 Docker Hub 獲取的,則此錯誤表示已達到 Docker 集線器拉入限制。

建議解決方案:使用 Docker Hub 私有註冊表,或從亞馬遜 ECR 獲取您的圖片。如需使用私有登錄檔的詳細資訊,請參 私有登錄檔AWS Secrets ManagerCodeBuild 範例。如需使用 Amazon ECR 的詳細資訊,請參適用於的 Amazon ECR 範例 CodeBuild

錯誤:建置容器在完成建置之前發現失效。因為記憶體不足,或不支援 Docker 映像,建置容器失效。ErrorCode: 500 英寸

問題:當您嘗試在AWS CodeBuild,則在置備階段會發生此錯誤。

可能原因:

  • CodeBuild 置不支援容器作業系統版本。

  • 在容器中指定 HTTP_PROXYHTTPS_PROXY,或兩者都指定。

建議解決方案:

  • 針對 Microsoft Windows,請使用容器作業系統版本為 microsoft/windowsservercore:10.0.x 的 Windows 容器 (例如 microsoft/windowsservercore:10.0.14393.2125)。

  • 針對 Linux,請清除 Docker 映像中的 HTTP_PROXYHTTPS_PROXY 設定,或指定您建置專案的 VPC 組態。

錯誤:執行建置時「無法連接到 Docker 守護程序」

問題:您的建置失敗,您將收到類似Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?在構建日誌中。

可能原因:您不是在特殊權限模式中執行您的建置。

建議解決方案:按照下列步驟,在特殊權限模式中執行您的建置:

  1. 前往 https://console.aws.amazon.com/codebuild/ 開啟 CodeBuild 主控台。

  2. 在導覽窗格中,選擇 Build projects (組建專案),然後選擇您的組建專案。

  3. Edit (編輯) 選擇 Environment (環境)

  4. 選擇 Override images (覆寫映像),然後選擇 Environment (環境)

  5. 指定您的環境映像、作業系統、執行時間和映像。這些設定應該符合失敗建置的設定。

  6. 選取 Privileged (特殊權限)

    注意

    根據預設,Docker 容器不允許存取任何裝置。「Privileged」(特殊權限) 模式會授予建置專案之 Docker 容器對所有裝置的存取權。如需詳細資訊,請參閱 Docker Docs 網站上的 Runtime Privilege and Linux Capabilities

  7. 選擇 Update environment (更新環境)

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

錯誤:建立或更新建置專案時,「代碼建置未獲授權執行:STS: AssumeRole」

問題:當您嘗試建立或更新建置專案時,您將收到錯誤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 區域,請確定 AWS STS 已啟用。如需詳細資訊,請參閱《IAM 使用者指南》中的在 AWS STS 區域內啟用和停用 AWS

  • 確保目標 CodeBuild 服務角色存在於您的AWS帳户。如果您不是使用主控台,請確定您在建立或更新組建專案時沒有拼錯服務角色的 Amazon Resource Name (ARN)。

  • 請確定目標 CodeBuild 服務角色有足夠許可來信任 CodeBuild。如需詳細資訊,請參閱建立 CodeBuild 服務角色中的信任關係政策陳述式。

錯誤:「調用 GetBucketAcl:儲存貯體擁有者已變更,或服務角色不再有權呼叫 S3: GetBucketAsc」

問題:當您執行組建時,您會收到有關 S3 儲存貯體擁有權變更的錯誤,GetBucketAcl許可。

可能原因:您已將s3:GetBucketAcls3:GetBucketLocationIAM 角色的許可。這些許可會保護您專案的 S3 儲存貯體,並確保只有您可加以存取。新增這些許可之後, S3 儲存貯體的擁有者會變更。

建議解決方案:請確認您是 S3 儲存貯體的擁有者,然後再次將許可新增到您的 IAM 角色。如需詳細資訊,請參閱 安全存取 S3 儲存貯體

錯誤:「上傳工件失敗:執行建置時無效的 arn」

問題:當您執行建置時,UPLOAD_ARTIFACTS建置階段失敗,出現錯誤Failed to upload artifacts: Invalid arn

可能原因:您的 S3 輸出存儲桶(AWS CodeBuild存儲其來自構建的輸出)位於AWS區域與 CodeBuild 項目不同。

建議解決方案:更新建置專案的設定來指向同一AWS區域作為建置專案。

錯誤:「Git 克隆失敗:無法存取'your-repository-URL':SSL 憑證問題:自我簽署的憑證」

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

可能原因:您的來源儲存庫有自我簽署憑證,但您在組建專案中未選擇從 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) 進行測試。不應用於生產環境。

錯誤:執行建置時,「必須使用指定的端點來定址您嘗試存取的儲存貯體」

問題:當您執行建置時,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區域不同於AWS CodeBuild建置專案。

建議解決方案:更新建置專案的設定來指向您預先建置的原始程式碼所在的儲存貯體。確保儲存貯體是在同一個AWS區域作為建置專案。

錯誤:「政策的預設版本不是由增強型零點擊角色建立所建立,或不是增強型零點擊角色建立所建立的最新版本。」

問題:當您嘗試在主控台更新專案時,更新失敗,並出現此錯誤:

可能原因:

  • 對於連接至目標 AWS CodeBuild 服務角色的政策,您已更新。

  • 您所選取連接至目標 CodeBuild 服務角色的政策是舊版。

建議解決方案:

  • 編輯您的 CodeBuild 項目並清除允許 CodeBuild 修改此服務角色,以便它可以與此構建項目一起使用核取方塊。確認您使用的 CodeBuild 服務角色是否具備足夠的許可。如果您再次編輯 CodeBuild 專案,您必須再次清除此複選框。如需詳細資訊,請參閱 建立 CodeBuild 服務角色

  • 按照下列步驟編輯您的 CodeBuild 專案以使用新的服務角色:

    1. 開啟 IAM 控台並建立新的服務角色。如需詳細資訊,請參閱 建立 CodeBuild 服務角色

    2. 開啟AWS CodeBuild主控台https://console.aws.amazon.com/codesuite/codebuild/home

    3. 在導覽窗格中,選擇 Build projects (建置專案)

    4. 選擇您建置專案旁的按鈕、選擇 Edit (編輯),然後選擇 Environment (環境)

    5. Service role (服務角色) 中,選擇您所建立的角色。

    6. 選擇 Update environment (更新環境)

錯誤:「此建置映像需要選取至少一個執行時間版本。」

問題:當您執行建置時,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.0CodeBuild 受管映像,您必須在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

錯誤:「已排入列的位置:建置隊列中的建置失敗時

問題:建置專案中的建置失敗,錯誤類似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:由 預留。AWSDNS 伺服器的 IP 地址一律為 VPC 網路範圍的基礎加二;但是,我們也會預留每個子網路範圍的基礎加二。針對使用多個 CIDR 區塊的 VPC,DNS 伺服器的 IP 地址會位於主要 CIDR。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的 Amazon DNS 伺服器

  • 10.0.0.3:由 AWS 預留,供日後使用。

  • 10.0.0.255:網路廣播地址。VPC 中不支援播送。此為預留的地址。

建議解決方案:檢查您的 VPC 是否使用預留的 IP 地址。請將所有預留 IP 地址替換為非預留的 IP 地址。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的 VPC 和子網路規模調整

錯誤:無法下載緩存:RequestError:發送請求失敗,原因是:x509:無法加載系統根目錄並且未提供根」

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

可能原因:您已在建置專案中設定快取,而使用的 Docker 影像較舊且包含過期的根憑證。

建議解決方案:更新您的 AWS CodeBuild 專案中使用的 Docker 影像。如需詳細資訊,請參閱 CodeBuild 提供的 Docker 映像

錯誤:「無法從 S3 下載憑證。AccessDenied」

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

可能原因:

  • 您選擇錯誤的 S3 儲存貯體來取得您的憑證。

  • 您為憑證輸入的物件金鑰錯誤。

建議解決方案:

  • 編輯您的專案。針對 Bucket of certificate (憑證的儲存貯體),選擇存放 SSL 憑證的 S3 儲存貯體。

  • 編輯您的專案。針對 Object key of certificate (憑證的物件金鑰),輸入 S3 物件金鑰的名稱。

錯誤:無法找到憑證

問題:當您嘗試運行AWS CLI,請使用AWS建置套件,或在建置過程中呼叫另一個類似元件,您看到與AWS CLI、AWS軟件開發工具包或組件。例如,您可能會收到 Unable to locate credentials 等建置錯誤。

可能原因:

  • 建置環境中的 AWS CLI、AWS 開發套件或元件的版本與 AWS CodeBuild 不相容。

  • 您在使用 Docker 的建置環境內執行 Docker 容器,但該容器依預設無法存取 AWS 登入資料。

建議解決方案:

  • 請確定建置環境有下列版本或更高版本的 AWS CLI、AWS 開發套件或元件。

    • AWS CLI: 1.10.47

    • AWSSDK for C++ 開發套件:0.2.19

    • AWSSDK for Go 開發套件:1.2.5

    • AWS適 SDK for Java 發套件:1.11.16

    • AWS適用於 JavaScript 的軟體開發套件:2.4.7

    • AWS適 SDK for PHP 發套件:3.18.28

    • AWSSDK for Python (Boto3):1.4.0

    • AWSSDK for Ruby 開發套件: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
    2. 在您的 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

問題:您會收到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 設定為明確代理伺服器

  • 按照下列步驟,將專有終端節點用於 Amazon S3 和 CloudWatch Logs:

    1. 在您的私有子網路路由表中,移除您為了將流向網際網路的流量路由傳送到代理伺服器而新增的規則。如需相關資訊,請參閱「」。在您的 VPC 中建立子網路中的Amazon VPC User Guide

    2. 建立私有 Amazon S3 端點和 CloudWatch Logs 端點,並將它們與 Amazon VPC 的私有子網路建立關聯。如需相關資訊,請參閱「」。VPC 端點服務中的Amazon VPC User Guide

    3. 確認啟用私有 DNS 名稱在您的亞馬遜 VPC 中選擇。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的建立介面端點

  • 如果您未將 ssl-bump 用於明確的代理伺服器,請使用 proxy 元素將代理組態新增至您的 buildspec 檔案。如需詳細資訊,請參閱 在明確代理伺服器中執行 CodeBuildBuildspec 語法

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

Bourne Shell (sh) 必須存在於建置映像中

問題:您使用的建置映像不是由AWS CodeBuild,並且您的構建失敗,並顯示消息Build container found dead before completing the build

可能原因:伯恩殼 (sh)不包含在構建映像中。CodeBuild 需求sh來運行構建命令和腳本。

建議解決方案:如果sh,請務必先加進它,再啟動用到您的映像的其他任何組建。(CodeBuild 已經包含sh在其構建映像中。)

警告:執行建置時,「跳過執行時間安裝。此組建映像不支援執行時間版本選項」

問題:執行建置時,建置日誌包含此警告。

可能原因:您的建置未使用 Amazon Linux 2 (AL2) 標準映像版本 1.0 或更新版本,或 Ubuntu 標準映像版本 2.0 或更新版本和於runtime-versions區段。

建議解決方案:確定您的 Buildspec 檔案不包含runtime-versions區段。所以此runtime-versions區段中,只有在使用 Amazon Linux 2 (AL2) 標準映像或更新版本,或 Ubuntu 標準映像版本 2.0 或更新版本時,才需要。

錯誤:打開 CodeBuild 控制台時「無法驗證作業工作人員身份」

問題:當您打開 CodeBuild 控制台時,將顯示 "無法驗證 JobWorker 身份" 錯誤消息。

可能原因:用於控制台訪問的 IAM 角色具有jobId作為關鍵。此標籤密鑰是為 CodeBuild 保留的,如果存在,則會導致此錯誤。

建議解決方案:更改具有密鑰的任何自定義 IAM 角色標籤jobId設置為不同的密鑰,例如jobIdentifier

無法啟動

問題:啟動構建時,您會收到無法啟動錯誤訊息。

可能原因:已達到併發生成的數量。

建議解決方案:等待其他構建完成,或者增加該項目的同步構建限制,然後再次啟動構建。如需詳細資訊,請參閱 專案配置

訪問本地緩存的構建中的 GitHub 元數據

問題:在某些情況下,緩存構建中的 .git 目錄是一個文本文件,而不是目錄。

可能原因:當為構建啟用本地源緩存時,CodeBuild 會為.git目錄。這表示.git目錄實際上是包含目錄路徑的文本檔案。

建議解決方案:在所有情況下,請使用以下命令獲取 Git 元數據目錄。這個命令都會起作用,無論.git

git rev-parse --git-dir

AccessDenied:報告組的儲存貯體擁有者與 S3 儲存貯體的擁有者不相符...

問題:將測試數據上傳至 Amazon S3 儲存貯體時,CodeBuild 無法將測試數據寫入儲存貯體。

可能原因:

  • 為報告組儲存貯體擁有者指定的賬户與 Amazon S3 儲存貯體擁有者不匹配。

  • 服務角色沒有儲存貯體的寫入許可。

建議解決方案:

  • 將報告組儲存貯體擁有者更改為與 Amazon S3 儲存貯體的擁有者相符。

  • 修改服務角色以允許 Amazon S3 儲存貯體的寫入存取權。