このページでは、ビルドの実行時に発生する可能性のある一般的なエラー メッセージに対するトラブルシューティングの方法と解決策を説明します。
ビルドログを確認しましたか?
Logging または Cloud Storage のビルドログ
を使用して、ビルドエラーの詳細情報を取得します。stdout または
stderr に書き込まれたログは
、 コンソールと gcloud CLI を使用して表示できます。 Google Cloud
ユーザーにビルドログへのアクセス権が付与されていないため、手動ビルドが失敗する
手動でビルドを実行しようとすると、次のエラーが表示されます。
AccessDeniedAccess denied. [EMAIL_ADDRESS] does not have storage.objects.get access to the Google Cloud Storage object.
このエラーが表示される理由は、Cloud Build では、手動ビルドを実行し、デフォルトの Cloud Storage ログバケットを使用しているユーザーに、Cloud Build 編集者のロールとプロジェクト閲覧者の IAM ロールが付与されている必要があるためです。このエラーを解決するには、次のいずれかを行います。
デフォルトのログバケットを使用して、ビルドを実行するユーザーにプロジェクト閲覧者のロールと Cloud Build 編集者のロールを付与します。この権限を付与する方法については、Cloud Build リソースへのアクセスを構成するをご覧ください。
ログを保存するための独自の Cloud Storage バケットを作成します。手順については、 ユーザーが作成したバケットへのビルドログの保存をご覧ください。
iam.serviceAccounts.actAs 権限が付与されていないため、ビルドが失敗する
Cloud Run や App Engine などのマネージド サービスを使用してビルドをデプロイしようとすると、次のエラーが表示されます。
Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE ACCOUNT]
このエラーに対処するには、 指定した Cloud Build サービス アカウント またはデフォルトの Cloud Build サービス アカウント を構成して、ビルドに使用しているマネージド サービスのサービス アカウントを偽装します。このタスクの詳細については、 マネージド サービス用に Cloud Build サービス アカウントの権限借用を構成するをご覧ください。
サービス アカウントと権限の詳細については、次のトピックをご覧ください。
- ユーザー指定のサービス アカウントを構成する
- Cloud Build デフォルト サービス アカウント
- IAM のロールについて
- Cloud Build デフォルト サービス アカウントに権限を付与する
Cloud Run Functions でデプロする際に権限が拒否されたエラーが発生する
Cloud Run Functions を使用しようとすると、次のエラーが表示されます。
ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.get' denied]
このエラーに対処するには、ビルド サービス アカウントに Cloud Run Functions デベロッパーのロールを付与します。
cloudbuild.builds.create 権限が付与されていないため、ビルドトリガーが失敗する
ビルドトリガーの実行時に、次のようなエラーが表示されます。
Failed to trigger build: Permission 'cloudbuild.builds.create' denied on resource 'projects/xxxxxxxx' (or it may not exist)
ビルドトリガーは、サービス アカウントを使用してビルドを作成します。このエラーは、サービス アカウントに cloudbuild.builds.create IAM 権限が付与されていないことを示しています。この権限は、サービス アカウントがビルドトリガーを実行するために必要です。このエラーを解決するには、ユーザー指定のサービス アカウントまたはデフォルトのサービス アカウントに Cloud Build Service Account
IAM ロールを付与します。
サービス エージェントの権限が付与されていないため、ビルドの送信に失敗する
Cloud Build サービス エージェントが 削除されているか、権限が付与されていない場合、ビルドを送信するときに 次のエラーが発生することがあります。
Caller does not have required permission to use project $PROJECT_ID. Grant the caller the roles/serviceusage.serviceUsageConsumer role, or a custom role with the serviceusage.services.use permission, by visiting https://console.developers.google.com/iam-admin/iam/project?project=$PROJECT_ID and then retry. Propagation of the new permission may take a few minutes.
このシナリオの呼び出し元は、Cloud Build サービス エージェントです。この権限に関する問題を解決するには、次の手順に従います。
Cloud Build サービス エージェントが存在することを確認します。プロジェクトのサービス エージェントを表示するには、 コンソールの Google Cloud IAM ページに移動し、[Google マネージド サービス アカウントを表示する] チェックボックスをオンにします。存在しない場合は、次の gcloud CLI コマンドを実行して作成できます。
gcloud beta services identity create --service=cloudbuild.googleapis.com \ --project=PROJECT_ID次に、Cloud Build サービス エージェントに
roles/cloudbuild.serviceAgentIAM ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com" \ --role="roles/cloudbuild.serviceAgent"
サービス エージェントの権限の問題の原因となった IAM ID を確認するには、次の手順を行います。
コンソールでログ エクスプローラを開きます。 Google Cloud
クエリ フィールドに次のテキストを入力します。
resource.type="project" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" "service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"このクエリを使用した後にログエントリが表示された場合は、サービス エージェント(
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com)から権限が削除されているかどうかを確認します。削除されている場合は、そのログのprotoPayload.authenticationInfo.principalEmailを見て、権限またはエラー メッセージに記載されている権限を含むroles/cloudbuild.serviceAgentロールの削除に関連する IAM ID を確認します。
Couldn't read commit エラーでトリガーが失敗する
ビルドトリガーの実行時に次のエラーが表示されます。
Failed to trigger build: Couldn't read commit
存在しないブランチを使用してビルドをトリガーしようとすると、Cloud Build はこのメッセージを返します。 ディレクトリ名で、スペルと整合性を確認してください。トリガーの設定手順については、ビルドトリガーを作成して管理するをご覧ください。
Pub/Sub トリガーを作成できない
Pub/Sub トリガーを作成する際に、次のエラーが表示されます。
Failed to create trigger: Request is prohibited by organization's policy
このエラーは、プロジェクトで Pub/Sub API が制限されていることを示しています。Pub/Sub API を制限するプロジェクトでは、push サブスクリプションを作成する機能が制限されます。境界内の制限付きサービスから Pub/Sub を一時的に削除し、トリガーを作成して Pub/Sub API を再度制限すると、エラーを解決できます。
エラー fatal: could not read Username が発生し、プライベート リポジトリからブランチを pull またはフェッチできない
プライベート リポジトリからリモート ブランチに対して git pull または git fetch を実行しようとすると、次のエラーが表示されます。
fatal: could not read Username for '<REMOTE_URL>': No such device or address
プライベート リポジトリでは、リポジトリの最初のクローン作成後に git 認証情報ヘルパーが意図的に削除されるため、このエラーは想定どおりです。 プライベート リポジトリからリモート ブランチをフェッチするには、ビルドステップとして認証情報(API トークン、SSH 認証鍵)を手動で設定します。 詳しくは、限定公開 GitHub リポジトリへのアクセスをご覧ください。
無効な SSH 承認が原因でビルドが失敗する
ビルドの実行時に次のエラーが表示されます。
Could not parse ssh: [default]: invalid empty ssh-agent socket, make sure SSH_AUTH_SOCK is set
このエラーは、SSH 認証に問題があることを示しています。よくある例は、Cloud Build を使用して限定公開 GitHub リポジトリにアクセスすると発生する SSH 承認エラーです。GitHub の SSH の設定手順については、限定公開 GitHub リポジトリへのアクセスをご覧ください。
No route to host エラーのためビルドが失敗する
プライベート プールでビルドを実行すると、次のエラーまたは同様のエラーが表示されます。
Unable to connect to the server: dial tcp 192.168.10.XX:<port>: connect: no route to host
Cloud Build は、Cloud ビルダーを、Google マネージド プロジェクトの仮想マシンで
Docker コンテナを使用して実行します。Docker ブリッジ インターフェース(および、その結果このインターフェースに接続されたコンテナ)には 192.168.10.0/24 の IP 範囲が割り当てられるため、同じサブネット内にある外部ホストとの通信ができなくなります。プライベート プールの構成中にプロジェクトにあるリソースの IP 範囲を割り当てる場合は、192.168.10.0/24 以外の範囲を選択することをおすすめします。手順については、プライベート プールの環境を設定するをご覧ください。
ビルドが「Expired」というエラー メッセージで失敗し、ログが表示されない
ビルドをトリガーまたは送信すると、ビルドが失敗し、「Expired」エラーがスローされ、ログが生成されません。
構成で次のことを確認します。
低い
queueTtl値(20 秒など)を構成している。スキーマの値を増やして、ビルドを再度実行します。詳細については、
queueTtlをご覧ください。同時ビルドの割り当てに達している。
割り当ての引き上げは、 コンソールの [割り当て] ページからリクエストできます。 Google Cloud 詳細については、割り当てと上限をご覧ください。
プライベート プールを使用しており、デフォルト以外のマシンを選択している。
新しい仮想マシンの起動を待つ必要があるため、ビルドの開始に時間がかかることがあります。詳細については、 マシンタイプ をご覧ください。
マシンタイプの変更を試すことができます。
プライベート プールを使用しており、プールに IP 範囲を指定している。
IP の物理範囲によって、プール内のワーカー VM の数が決まります。そのため、同時ビルドの割り当てよりも少ない場合でも、同時ビルドの上限が決まります。プールで使用可能なワーカー VM がない場合、ビルドはキューに登録されます。
これは、指定されたサブネット内の使用可能な IP アドレスが完全に使用され、新しい Cloud Build ワーカーに割り当てるアドレスが残っていない場合に発生します。サブネットの範囲を増やして、ビルドを再実行してください。
外部 IP が有効化されていないために外部リソースへの接続が失敗する
プライベート プールから外部リソースに接続すると、次のエラーが表示されます。
Failed to connect to <external_domain>: Connection timed out
プライベート プールは、外部 IP を使用して公共のインターネットにあるリソース(外部リポジトリなど)にアクセスします。プライベート プールを作成または更新するときに、チェックボックスをオンにして、プライベート プールに外部 IP を割り当てます。プライベート プール内のフィールドの作成または更新に関する手順については、プライベート プールの作成と管理をご覧ください。
I/O タイムアウト エラー
ビルドの実行時に次のエラーが表示されます。
Timeout - last error: dial tcp IP_ADDRESS: i/o timeout
このエラーは、ビルドを使用してプライベート ネットワーク内のリソースにアクセスしようとしたものの、失敗した場合に発生することがあります。デフォルトでは、Cloud Build を使用して実行されるビルドは、公共のインターネットのプライベート リソース(リポジトリやレジストリ内のリソースなど)にアクセスできます。ただし、ビルドを使用してプライベート ネットワーク内のリソースにアクセスするには、プライベート プールを使用し、プライベート ネットワークにアクセスするようプライベート プールを構成する必要があります。 プライベート ネットワークで Cloud Build を使用するをご覧ください。
4xx クライアント エラー
このエラーのグループは、リクエストの送信ユーザーが失敗したことによってビルド リクエストが正常に完了しなかったことを示します。4xx クライアント エラーの例を以下に示します。
**Error**: 404 : Requested entity was not found**Error**: 404 : Trigger not found**Error**: 400 : Failed Precondition**Error**: 403 : Permission denied
4xx クライアント エラーが表示される場合は、ビルドログを確認し、エラーの理由に関する詳細情報が記載されているかどうかを確認します。クライアント エラーのよくある原因には、次のようなものがあります。
- 指定したソースの場所には commit することが必要な新しい情報が存在せず、作業用ツリーがクリーンである。この場合はソースコードの場所を確認して、もう一度ビルドをお試しください。
- リポジトリにビルド構成ファイルが含まれていない。これに該当する場合は、ビルド構成ファイルをリポジトリにアップロードし、ビルドを再度実行します。
- 誤ったトリガー ID を指定した。
- GitHub アプリのインストール後に新しいリポジトリを最近追加しており、Cloud Build に新しいリポジトリにアクセスする権限が付与されていない。これに該当する場合は、新しいリポジトリを Cloud Build に接続します。
- ビルド サービス アカウントに別の権限を付与する必要があります。
割り当ての制限によりビルドが失敗する
特定のリージョンで割り当ての制限によりビルドが失敗していることを示す次のエラーが表示されます。
Failed to trigger build: generic::failed_precondition: due to quota restrictions, cannot run builds in this region. Please contact support.
この特定のリージョンの割り当てを引き上げるには、Cloud カスタマーケアにお問い合わせください。
Docker レジストリからイメージを pull する際のタイムアウトの問題
ビルドの実行後、Cloud Build ログに次のタイムアウト エラーが表示されます。
Step #0: Pulling image: python:3.8.16-alpine3.17
Step #0: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Step 1/7 : FROM python:3.8.16-alpine3.17
Get "https://registry-1.docker.io/v2/": dial tcp 34.205.13.154:443: i/o timeout
このエラーを解決するには、crane を使用して Docker イメージをダウンロードし、そのイメージを Cloud Build Docker イメージに読み込みます。
次のスニペットを cloudbuild.yaml ファイルに追加します。
...
# Crane runs as a regular user so we need to allow it to access the directory where it saves the image.
- name: gcr.io/cloud-builders/docker
args:
- a+w
- /workspace
entrypoint: chmod
# Use crane to download the image through the proxy
- name: gcr.io/go-containerregistry/crane
env: - 'HTTPS_PROXY=HTTPS_PROXY'
args:
- pull
- 'python:3.8.16-alpine3.17'
- /workspace/image.tar
# Use docker load to add the image into the local Cloud Build registry
- name: gcr.io/cloud-builders/docker
args: [load, --input, "/workspace/image.tar"]
- .
HTTPS_PROXY: HTTP プロキシのアドレス(https://proxy.example.com:8888/など)。
イメージが読み込まれると、既存の cloudbuid.yaml ステップは通常どおりに機能します。例:
...
- name: python:3.8.16-alpine3.17
args:
- echo
- hello
entrypoint: bash
# Or use it internally on a Dockerfile
- name: gcr.io/cloud-builders/docker
args:
- build
長時間実行 Docker ステップの Unauthenticated エラー
1 時間以上実行される Docker コマンド(大きなイメージを Artifact Registry に push するなど)を含むビルドステップは、認証エラーで失敗することがあります。 Cloud Build は認証トークンを 1 時間ごとに更新しますが、Docker がこれらの新しいトークンの取得に失敗し、認証の問題が発生する可能性があります。独自の存続期間を持つ独自のトークンを作成し、Docker コマンド用にファイル化して参照できます。
VPC ネットワークにピアリングされたプライベート プール内のキューに登録されたビルド
サービス プロデューサー ネットワークが独自の VPC ネットワークにピアリングされているプライベート プールでビルドを実行する場合は、これら 2 つのネットワーク間のプライベート接続が維持されていることが重要です。プライベート プールが依存していたプライベート接続を削除すると、プライベート プールが破損する可能性があります。これは、最終的にタイムアウトするまでキューに登録されたままのビルドとして表示されることがあります。したがって、プライベート接続を削除する場合は、このプライベート接続を使用してサービス プロデューサー ネットワークが独自の VPC ネットワークに接続されていたプライベート プールも削除してください。
2 か月を超える期間にわたり保留中のビルドを承認または却下しようとする
2 か月を超える期間にわたり保留中のビルドを承認または却下することはできません。これを行おうとすると、次のようなエラー メッセージが表示されることがあります。
404, "message": "Requested entity was not
found.", "status": "NOT_FOUND" } }
この場合は、新しいビルドを送信してみてください。
プライベート プールを作成できませんでした: ワーカープールが Service Networking API にピアリングされていません
プライベート プールを作成しようとしましたが、次のエラー メッセージが表示されます。
Failed to create private pool private-worker-pool: generic::failed_precondition: network "projects/PROJECT_NAME/global/networks/vpc-scmdev-lab-vpc" is not peered to the Service Networking API; please check your configuration and the documentation for troubleshooting and setting up your pool
ビルドで Virtual Private Cloud ネットワークからプライベート リソースにアクセスするには、Virtual Private Cloud ネットワークとプライベート プールがある Virtual Private Cloud ネットワークの間にピアリング接続を設定する必要があります。手順については、 VPC ネットワークとサービス プロデューサー ネットワーク間のプライベート接続を設定するをご覧ください。
プライベート プールを作成できませんでした: peered_network 構成にアクセスできません
共有 VPC を使用している場合、または Service Networking サービス エージェントを以前に削除した場合は、次のようなエラーでプライベート プールの作成が失敗することがあります。
generic::permission_denied: cannot access peered_network config.
この問題を解決するには、Service Networking サービス エージェント(service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com)がサービス プロジェクトに存在し、必要な権限が付与されていることを確認します。
サービス アカウントがない場合は作成します。
gcloud beta services identity create \
--service=servicenetworking.googleapis.com \
--project=PROJECT_ID
サービス アカウントに必要な roles/servicenetworking.serviceAgent ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com" \
--role="roles/servicenetworking.serviceAgent"
次のステップ
- ビルドログを管理する方法を確認する。