本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
疑難排 AWS CodeBuild
使用本主題的資訊來協助您查明、診斷和解決問題。若要瞭解如何記錄和監視 CodeBuild 組建以進行問題疑難排解,請參閱記錄和監控。
主題
- Apache Maven 建置參考錯誤儲存庫中的成品
- 建置命令預設以 root 身分執行
- 當檔案名稱具有非美國時,組建可能會失敗。 英文字符
- 從 Amazon EC2 參數存放區取得參數時,組建可能會失敗
- 無法在 CodeBuild 主控台存取分支篩選條件
- 無法檢視組建成功或失敗
- 未報告給來源提供者的組建狀態
- 無法找到並選擇 Windows 服務器核心 2019 平台的基本映像
- 在 Buildspec 檔案中後來的命令無法辨識先前的命令
- 錯誤:嘗試下載快取時出現「存取遭拒」
- 使用自訂建置映像時發生錯誤:"BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE"
- 錯誤:「構建容器在完成構建之前發現已死機。構建容器因內存不足而死亡,或者不支持 Docker 映像。 ErrorCode:
- 執行組建時發生錯誤:「無法連接到 Docker 協助程式」
- 建立或更新建置專案時,錯誤:AssumeRole"CodeBuild 未授權執行:sts:"
- 錯誤:「調用錯誤 GetBucketAcl:存儲桶所有者已更改或服務角色不再具有調用 s3 的權限:GetBucketAcl」
- 執行建置時發生錯誤:「無法上傳成品:無效的 arn」
- 錯誤:「Git 複製失敗:無法存取 'your-repository-URL':SSL 憑證問題:自我簽署憑證」
- 執行建置時發生錯誤:「必須使用指定的端點來定址您嘗試存取的儲存貯體」
- 錯誤:「此建置映像需要選取至少一個執行時間版本。」
- 錯誤:"QUEUED: INSUFFICIENT_SUBNET",當建置佇列中的建置失敗時
- 錯誤:「無法下載緩存: RequestError:發送請求失敗,原因是:x509:無法加載系統根目錄並且沒有提供根目錄」
- 錯誤:「無法從 S3 下載憑證。 AccessDenied」
- 錯誤:「找不到登入資料」
- RequestError 在代理服務器 CodeBuild 中運行時出現超時錯誤
- Bourne Shell (sh) 必須存在於建置映像中
- 執行建置時出現警告:「正在略過執行時間的安裝。此建置映像不支援執行時間版本選項」
- 錯誤:開啟 CodeBuild 主控台時出現「無法驗證 JobWorker 身分」
- 建置無法啟動
- 存取本機快取組建中的中 GitHub 繼資
- AccessDenied:報表群組的儲存貯體擁有者不符合 S3 儲存貯體的擁有者...
Apache Maven 建置參考錯誤儲存庫中的成品
問題:當您在 AWS CodeBuild提供的 Java 構建環境中使用 Maven 時,Maven 會從 https://repo1.maven.org/maven2pom.xml
檔案明確宣告改用其他位置,還是會發生此情況。
可能的原因: CodeBuild-提供的 Java 構建環境包含一個名為的文件,settings.xml
該文件已預先安裝在構建環境的/root/.m2
目錄中。settings.xml
檔案包含下列宣告,指示 Maven 一律從位於 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>
建議解決方案:執行下列操作:
-
將
settings.xml
檔案新增至您的原始碼。 -
在此
settings.xml
檔案中,將先前的settings.xml
格式當作指南,宣告您希望 Maven 改以從哪些儲存庫中提取組建和外掛程式相依性。 -
在構建項目的
install
階段,指示將settings.xml
文件複製 CodeBuild 到構建環境的/root/.m2
目錄。例如,buildspec.yml
檔案中有下列程式碼片段示範此行為。version 0.2 phases: install: commands: - cp ./settings.xml /root/.m2/settings.xml
建置命令預設以 root 身分執行
問題:以 root 使用者身分 AWS CodeBuild 執行您的建置命令。即使相關組建映像的 Dockerfile 將 USER
指示設為不同使用者,還是會發生此情況。
原因:默認情況下,以 root 用戶身份 CodeBuild 運行所有構建命令。
建議解決方案:無。
當檔案名稱具有非美國時,組建可能會失敗。 英文字符
問題:當您執行組建時,使用檔案名稱包含非 U.S. 英文字元 (例如,中文字元),建置失敗。
可能的原因:所提供的建置環境 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 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/
建立 Webhook 篩選群組。例如,如果分支篩選條件規則表達式為 branchName
$^branchName$
,則您放在 HEAD_REF
篩選條件中已更新的規則表達式為 ^refs/heads/branchName$
。如需詳細資訊,請參閱 比特桶網絡鉤事件 及 過濾 GitHub 網絡掛鉤事件(控制台)。
無法檢視組建成功或失敗
問題:您看不到重試的建置是成功或失敗。
可能的原因:建置狀態的報告選項未啟用。
建議的解決方案:在建立或更新 CodeBuild 專案時啟用報表組建狀態。此選項告知 CodeBuild 在您觸發建置時回報狀態。如需詳細資訊,請參閱 AWS CodeBuild API 參考中的 reportBuildStatus。
未報告給來源提供者的組建狀態
問題:允許向來源提供者 (例如 GitHub 或 Bitbucket) 報告建置狀態後,不會更新組建狀態。
可能的原因:與來源提供者關聯的使用者沒有存放庫的寫入權限。
建議的解決方案:若要能夠向來源提供者報告組建狀態,與來源提供者相關聯的使用者必須具有存放庫的寫入權限。如果使用者沒有寫入權限,則無法更新組建狀態。如需詳細資訊,請參閱 來源提供者存取。
無法找到並選擇 Windows 服務器核心 2019 平台的基本映像
問題:您無法找到或選取 Windows 伺服器核心 2019 平台的基本映像。
可能的原因:您使用的 AWS 地區不支援此影像。
建議的解決方案:使用下列其中一個 AWS 區域,其中支援 Windows 伺服器核心 2019 平台的基本映像︰
-
美國東部 (維吉尼亞北部)
-
美國東部 (俄亥俄)
-
美國西部 (奧勒岡)
-
歐洲 (愛爾蘭)
在 Buildspec 檔案中後來的命令無法辨識先前的命令
問題:Buildspec 檔案中後來的命令無法辨識同一 buildspec 檔案中先前一個或多命令的結果。例如,命令可能設定本機環境變數,但後來執行的命令可能無法取得該本機環境變數的值。
可能原因:在 buildspec 檔案 0.1 版中, AWS CodeBuild 會在建置環境的預設 shell 個別執行個體中執行每個命令。這表示每個命令會與所有其他命令隔離執行。所以,根據預設,如果單一命令倚賴任何先前命令的狀態,則無法執行此命令。
建議的解決方案:建議您使用建置規格 0.2 版,即可解決此問題。如果您必須使用 Buildspec 0.1 版,建議使用 Shell 命令鏈結運算子 (例如 Linux 中的 &&
),將多個命令合併成單一命令。或者,在您的原始碼中加進含有多個命令的 shell 指令碼,然後在 buildspec 檔案中從單一命令呼叫該 shell 指令碼。如需詳細資訊,請參閱 建置環境中的 Shell 和命令 及 建置環境中的環境變數。
錯誤:嘗試下載快取時出現「存取遭拒」
問題:在已啟用快取的建置專案上嘗試下載快取時,您收到 Access denied
錯誤。
可能原因:
-
您剛在組建專案中設定快取。
-
快取最近才透過
InvalidateProjectCache
API 而變成失效。 -
所使用的服務角色 CodeBuild 沒有
s3:GetObject
持有快取之 S3 儲存貯體的s3:PutObject
權限。
建議的解決方案:第一次使用時,在更新快取組態之後看到此訊息很正常。如果此錯誤持續發生,對於持有快取的 S3 儲存貯體,您應該檢查服務角色是否有 s3:GetObject
和 s3:PutObject
許可。如需詳細資訊,請參閱 Amazon S3 開發人員指南中的指定 S3 許可。
使用自訂建置映像時發生錯誤:"BUILD_CONTAINER_UNABLE_TO_PULL_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 樣本。
- 可能的原因:您要求的 Amazon ECR 映像無法在您的 AWS 帳戶使用的 AWS 地區使用。
-
建議的解決方案:使用與您 AWS 帳戶使用的區域位於相同 AWS 區域的 Amazon ECR 映像檔。
- 可能的原因:您在沒有公共互聯網訪問權限的 VPC 中使用私有註冊表。 CodeBuild 無法從 VPC 中的私有 IP 地址提取映像。如需詳細資訊,請參閱 帶有 AWS Secrets Manager 示例的私人註冊表 CodeBuild。
-
推薦的解決方案:如果您在 VPC 中使用私有註冊表,請確保 VPC 具有公共 Internet 訪問權限。
- 可能的原因:如果錯誤消息包含 toomanyrequests「「,並且映像是從 Docker Hub 獲取,則此錯誤表示已達到 Docker Hub 提取限制。
-
建議的解決方案:使用泊塢集線器私有註冊表,或從 Amazon ECR 獲取映像。如需使用私人登錄的詳細資訊,請參閱 帶有 AWS Secrets Manager 示例的私人註冊表 CodeBuild。如需使用 Amazon ECR 的詳細資訊,請參閱Amazon ECR 樣品 CodeBuild 。
錯誤:「構建容器在完成構建之前發現已死機。構建容器因內存不足而死亡,或者不支持 Docker 映像。 ErrorCode:
問題:當您嘗試在中使用 Microsoft 視窗或 Linux 容器時 AWS CodeBuild,會在佈建階段發生此錯誤。
可能原因:
-
不支援容器作業系統版本 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 協助程式」
問題:您的建置失敗,並在建置日誌中收到類似 Cannot connect to the Docker daemon
at unix:/var/run/docker.sock. Is the docker daemon running?
錯誤。
可能的原因:您不是在特殊權限模式中執行您的建置。
建議的解決方案:要修復此錯誤,您必須啟用特權模式並使用以下說明更新 buildspec。
若要以特殊權限模式執行組建,請依照下列步驟執行:
-
請在以下位置開啟 CodeBuild 主控台。
https://console.aws.amazon.com/codebuild/ -
在導覽窗格中,選擇 [建置專案],然後選擇您的建置專案。
-
從 Edit (編輯) 選擇 Environment (環境)。
-
選擇 Additional configuration (其他組態)。
-
如果您想要建置 Docker 映像或希望組建取得提升的權限,請從「授權」中選取「啟用此旗標」。 。
-
選擇 Update environment (更新環境)。
-
選擇 Start build (啟動組建) 來重試組建。
您還需要在容器內啟動 Docker 守護進程。你的構建規格的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 儲存驅動程式
注意
如果基本作業系統是 Alpine Linux,請在 buildspec.yml
中將 -t
引數新增至 timeout
:
- timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
若要深入瞭解如何使用建置和執行 Docker 映像檔 AWS CodeBuild,請參閱自訂影像範例中的泊塢視窗 CodeBuild 。
建立或更新建置專案時,錯誤:AssumeRole"CodeBuild 未授權執行:sts:"
問題:當您嘗試建立或更新建置專案時,您收到 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 STS 定您嘗試建立或更新建置專案的 AWS 區域已啟用。如需詳細資訊,請參閱 IAM 使用者指南AWS STS 中的在 AWS 區域中啟用和停用。
-
確定您的 AWS 帳戶中存在目標 CodeBuild 服務角色。如果您不是使用主控台,請確定您在建立或更新組建專案時沒有拼錯服務角色的 Amazon Resource Name (ARN)。
-
請確定目標 CodeBuild 服務角色具有足夠的權限可以信任 CodeBuild。如需詳細資訊,請參閱建立 CodeBuild 服務角色中的信任關係政策陳述式。
錯誤:「調用錯誤 GetBucketAcl:存儲桶所有者已更改或服務角色不再具有調用 s3 的權限:GetBucketAcl」
問題:當您執行建置時,您會收到有關 S3 儲存貯體擁有權和 GetBucketAcl
許可變更的錯誤。
可能的原因:您已將s3:GetBucketAcl
和s3:GetBucketLocation
許可新增至 IAM 角色。這些許可會保護您專案的 S3 儲存貯體,並確保只有您可加以存取。新增這些許可之後, S3 儲存貯體的擁有者會變更。
建議的解決方案:確認您是 S3 儲存貯體的擁有者,然後再次向 IAM 角色新增許可。如需詳細資訊,請參閱 安全存取 S3 儲存貯體。
執行建置時發生錯誤:「無法上傳成品:無效的 arn」
問題:當您執行建置時,UPLOAD_ARTIFACTS
建置階段失敗,並出現 Failed to
upload artifacts: Invalid arn
錯誤。
可能的原因:您的 S3 輸出儲存貯體 ( AWS CodeBuild 儲存組建輸出的儲存貯體) 位於不同於 CodeBuild 建置專案的 AWS 區域。
建議的解決方案:更新組建專案的設定,以指向與建置專案位於相同 AWS 區域的輸出值區。
錯誤:「Git 複製失敗:無法存取 'your-repository-URL'
:SSL 憑證問題:自我簽署憑證」
問題:當您嘗試執行建置專案時,建置失敗並出現此錯誤。
可能的原因:您的來源儲存庫有自我簽署憑證,但您在建置專案中未選擇從 S3 儲存貯體來安裝憑證。
建議解決方案:
-
編輯您的專案。針對 Certificate (憑證),選擇 Install certificate from S3 (從 S3 安裝憑證)。針對 Bucket of certificate (憑證的儲存貯體),選擇存放 SSL 憑證的 S3 儲存貯體。針對 Object key of certificate (憑證的物件金鑰),輸入 S3 物件金鑰的名稱。
-
編輯您的專案。選取「不安全的 SSL」可在連線至您的 GitHub 企業伺服器專案存放庫時忽略 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 CodeBuild 建置專案不同的 AWS 區域中。
建議的解決方案:更新建置專案的設定來指向您預先建置的原始程式碼所在的儲存貯體。請確定值區與建置專案位於相同的 AWS 區域。
錯誤:「此建置映像需要選取至少一個執行時間版本。」
問題:當您執行建置時,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 標準映像 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",當建置佇列中的建置失敗時
問題:建置佇列中的建置失敗,錯誤類似 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 伺服器。 -
10.0.0.3
:保留 AWS 供 future 使用。 -
10.0.0.255
:網路廣播地址。VPC 中不支援播送。此為預留的地址。
建議的解決方案:檢查您的 VPC 是否使用預留 IP 地址。請將所有預留 IP 地址替換為非預留的 IP 地址。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的 VPC 和子網路規模調整。
錯誤:「無法下載緩存: RequestError:發送請求失敗,原因是:x509:無法加載系統根目錄並且沒有提供根目錄」
問題:當您嘗試執行建置專案時,建置失敗並出現此錯誤。
可能的原因:您已在建置專案中設定快取,而使用的 Docker 影像較舊且包含過期的根憑證。
推薦的解決方案:更新項目中正在使用的 AWS CodeBuild Docker 映像。如需詳細資訊,請參閱 碼頭圖片提供 CodeBuild。
錯誤:「無法從 S3 下載憑證。 AccessDenied」
問題:當您嘗試執行建置專案時,建置失敗並出現此錯誤。
可能原因:
-
您選擇錯誤的 S3 儲存貯體來取得您的憑證。
-
您為憑證輸入的物件金鑰錯誤。
建議解決方案:
-
編輯您的專案。針對 Bucket of certificate (憑證的儲存貯體),選擇存放 SSL 憑證的 S3 儲存貯體。
-
編輯您的專案。針對 Object key of certificate (憑證的物件金鑰),輸入 S3 物件金鑰的名稱。
錯誤:「找不到登入資料」
問題:當您嘗試執行 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 SDK for C++:0.2.19
-
AWS SDK for Go:1.2.5
-
AWS SDK for Java:1.11.16
-
AWS 適用於 JavaScript:2.4.7 的開發套件
-
AWS SDK for PHP:3.18.28
-
AWS SDK for Python (Boto3): 1.4.0
-
AWS SDK 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 建置程序。
-
在 Docker 影像的原始碼 Dockerfile 中,指定下列
ARG
指示。ARG AWS_DEFAULT_REGION ARG AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
-
在您的 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 中運行時出現超時錯誤
問題: 您收到類似以下其中一項的 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 日誌。 -
Error uploading artifacts: RequestError: send request failed caused by: Put https://
來自 Amazon S3。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 設定為明確代理伺服器。 -
請依照下列步驟使用 Amazon S3 和 CloudWatch 日誌的私有端點:
-
在您的私有子網路路由表中,移除您為了將流向網際網路的流量路由傳送到代理伺服器而新增的規則。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的在 VPC 中建立子網路。
-
建立私有 Amazon S3 端點和 CloudWatch 日誌端點,並將其與 Amazon VPC 的私有子網路建立關聯。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的 VPC 端點服務。
-
確認已選取在您的 Amazon VPC 中啟用私人 DNS 名稱。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的建立介面端點。
-
-
如果您未將
ssl-bump
用於明確的代理伺服器,請使用proxy
元素將代理組態新增至您的 buildspec 檔案。如需詳細資訊,請參閱 在明確代理伺服器中執行 CodeBuild 及 Buildspec 語法。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
。
可能的原因:Bourne shell(sh
)不包含在構建映像中。 CodeBuild 需sh
要運行構建命令和腳本。
推薦的解決方案:如果構建映像sh
中不存在,請確保在啟動任何其他使用映像的構建之前包含它。(CodeBuild 已包含sh
在其構建映像中。)
執行建置時出現警告:「正在略過執行時間的安裝。此建置映像不支援執行時間版本選項」
問題:執行建置時,建置日誌包含此警告。
可能的原因:您的組建未使用版本 1.0 或更新版本的 Amazon Linux 2 (AL2) 標準映像檔,或是 2.0 版或更新版本的 Ubuntu 標準映像檔,並且在組建規格檔案的一runtime-versions
節中指定了執行階段。
建議的解決方案:確保 buildspec 檔案不包含 runtime-versions
區段。僅當您使用 Amazon Linux 2(AL2)標準映像或更高版本或 Ubuntu 標準映像版本 2.0 或更高版本時,才需要此runtime-versions
部分。
錯誤:開啟 CodeBuild 主控台時出現「無法驗證 JobWorker 身分」
問題:開啟 CodeBuild 主控台時,會顯示「無法驗證 JobWorker 身分識別」錯誤訊息。
可能的原因:用於主控台存取的 IAM 角色有一個標籤jobId
做為金鑰。此標籤鍵保留給 CodeBuild ,如果存在,則會導致此錯誤。
建議的解決方案:變更任何具有不同金鑰jobId
的自訂 IAM 角色標籤,例如jobIdentifier
.
建置無法啟動
問題:啟動組建時,您會收到組建無法啟動錯誤訊息。
可能的原因:已達到並行組建的數目。
推薦的解決方案:等到其他構建完成,或增加項目的同時構建限制,然後重新啟動構建。如需詳細資訊,請參閱 項目配置。
存取本機快取組建中的中 GitHub 繼資
問題:在某些情況下,快取組建中的 .git 目錄是文字檔案,而不是目錄。
可能的原因:為構建啟用本地源緩存時,為該.git
目錄 CodeBuild 創建一個 gitlink。這意味著該.git
目錄實際上是包含目錄路徑的文本文件。
建議的解決方案:在所有情況下,都可以使用下列命令來取得 Git 中繼資料目錄。無論以下格式如何,此命令都可以工作.git
:
git rev-parse --git-dir
AccessDenied:報表群組的儲存貯體擁有者不符合 S3 儲存貯體的擁有者...
問題:將測試資料上傳到 Amazon S3 儲存貯體時, CodeBuild 無法將測試資料寫入儲存貯體。
可能原因:
-
為報表群組儲存貯體擁有者指定的帳戶與 Amazon S3 儲存貯體的擁有者不符。
-
服務角色沒有值區的寫入存取權。
建議解決方案:
-
變更報表群組儲存貯體擁有者,以符合 Amazon S3 儲存貯體的擁有者。
-
修改服務角色以允許對 Amazon S3 儲存貯體進行寫入存取。