Memecahkan masalah error build

Halaman ini menyediakan strategi pemecahan masalah serta solusi untuk beberapa pesan error umum yang mungkin Anda lihat saat menjalankan build.

Apakah Anda melihat log build?

Gunakan Logging atau log build Cloud Storage untuk mendapatkan informasi selengkapnya tentang error build. Log yang ditulis ke stdout atau stderr akan muncul secara otomatis di konsol Google Cloud.

Build manual gagal karena pengguna tidak memiliki akses ke log build

Anda melihat error berikut saat mencoba menjalankan build secara manual:

AccessDeniedAccess denied. [EMAIL_ADDRESS] does not have storage.objects.get access to the Google Cloud Storage object.

Anda melihat error ini karena Cloud Build mewajibkan pengguna yang menjalankan build manual dan menggunakan bucket log Cloud Storage default memiliki peran IAM Project Viewer selain peran Editor Cloud Build. Untuk mengatasi error ini, Anda dapat melakukan salah satu tindakan berikut:

Build gagal karena tidak memiliki izin akun layanan

Jika akun layanan yang Anda gunakan untuk build tidak memiliki izin yang diperlukan untuk melakukan tugas, Anda akan melihat error seperti berikut:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE ACCOUNT]

Untuk mengatasi error ini, berikan izin yang diperlukan ke akun layanan. Gunakan informasi di halaman berikut untuk menentukan izin yang akan diberikan ke akun layanan build Anda:

Kegagalan build karena izin untuk akun layanan build tidak ada biasanya terjadi saat mencoba men-deploy menggunakan Cloud Build.

Error izin ditolak saat men-deploy di fungsi Cloud Run

Anda melihat error berikut saat mencoba menggunakan fungsi Cloud Run:

ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.get' denied]

Untuk mengatasi error ini, berikan peran Developer fungsi Cloud Run ke akun layanan build Anda.

Error izin tidak ada saat men-deploy di fungsi Cloud Run

Anda melihat error seperti berikut saat mencoba men-deploy di fungsi Cloud Run:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE ACCOUNT]

Untuk mengatasi error ini, berikan peran Service Account User ke akun layanan yang ditentukan pengguna atau akun layanan default.

Error saat men-deploy di App Engine

Anda melihat error seperti berikut saat mencoba men-deploy di App Engine:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE_ACCOUNT]

Untuk mengatasi error ini, berikan peran Admin App Engine ke akun layanan yang ditentukan pengguna atau akun layanan default.

Error saat men-deploy di GKE

Anda melihat error seperti berikut saat mencoba men-deploy di GKE:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE_ACCOUNT]

Untuk mengatasi error ini, berikan peran GKE Developer ke akun layanan build Anda.

Error saat men-deploy di Cloud Run

Anda melihat error seperti berikut saat mencoba men-deploy di Cloud Run:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE_ACCOUNT]

Anda melihat error ini karena akun layanan build Anda tidak memiliki izin IAM yang diperlukan untuk di-deploy di Cloud Run. Untuk mengetahui informasi tentang cara memberikan izin yang diperlukan, lihat Men-deploy di Cloud Run.

Pemicu build gagal karena izin cloudbuild.builds.create tidak ada

Anda akan melihat error seperti berikut saat menjalankan pemicu build:

Failed to trigger build: Permission 'cloudbuild.builds.create' denied on resource 'projects/xxxxxxxx' (or it may not exist)

Pemicu build menggunakan akun layanan untuk membuat build. Error ini menunjukkan bahwa akun layanan tidak memiliki izin IAM cloudbuild.builds.create, yang diperlukan agar akun layanan dapat menjalankan pemicu build. Anda dapat mengatasi error ini dengan memberikan peran IAM Cloud Build Service Account ke akun layanan yang ditentukan pengguna atau akun layanan default.

Kegagalan pengiriman build karena izin agen layanan tidak ada

Jika agen layanan Cloud Build dihapus atau tidak memiliki izin, hal ini dapat menyebabkan error berikut saat mengirimkan 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.

Pemanggil dalam skenario ini adalah agen layanan Cloud Build. Untuk menyelesaikan masalah izin ini, ikuti langkah-langkah berikut:

  1. Pastikan agen layanan Cloud Build ada. Anda dapat melihat agen layanan untuk project dengan membuka halaman IAM di konsol Google Cloud dan mencentang kotak Tampilkan akun layanan yang dikelola Google. Jika tidak ada, Anda dapat membuatnya dengan menjalankan perintah gcloud CLI berikut:

    gcloud beta services identity create --service=cloudbuild.googleapis.com \
        --project=PROJECT_ID
    
  2. Selanjutnya, berikan peran IAM roles/cloudbuild.serviceAgent ke agen layanan Cloud Build:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com" \
        --role="roles/cloudbuild.serviceAgent"
    

Jika Anda ingin memverifikasi identitas IAM yang berpotensi bertanggung jawab atas masalah izin agen layanan, ikuti langkah-langkah berikut:

  1. Buka Logs Explorer di konsol Google Cloud:

    Buka Logs Explorer

  2. Masukkan teks berikut di kolom kueri:

    resource.type="project"
    log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    "service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    
  3. Jika Anda melihat entri log setelah menggunakan kueri ini, periksa apakah ada entri yang menghapus izin dari agen layanan (service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com). Jika ya, lihat protoPayload.authenticationInfo.principalEmail dalam log tersebut untuk menentukan identitas IAM yang bertanggung jawab untuk menghapus izin atau peran roles/cloudbuild.serviceAgent yang berisi izin yang tercantum dalam pesan error.

Pemicu gagal dengan error Couldn't read commit

Anda melihat error berikut saat menjalankan pemicu build:

  Failed to trigger build: Couldn't read commit

Cloud Build menampilkan pesan ini jika Anda mencoba memicu build menggunakan cabang yang tidak ada. Tinjau nama direktori Anda untuk ejaan dan konsistensi. Untuk mengetahui petunjuk penyiapan pemicu, lihat Membuat dan mengelola pemicu build.

Tidak dapat membuat pemicu Pub/Sub

Anda melihat error berikut saat membuat pemicu Pub/Sub:

  Failed to create trigger: Request is prohibited by organization's policy

Error ini menunjukkan bahwa Pub/Sub API dibatasi di project Anda. Project yang membatasi Pub/Sub API membatasi kemampuan untuk membuat Langganan Push. Anda dapat menghapus Pub/Sub dari layanan yang dibatasi di perimeter untuk sementara, membuat pemicu, dan membatasi Pub/Sub API lagi untuk mengatasi error.

Error saat menyimpan image di Container Registry

Anda akan melihat sesuatu seperti error berikut saat build mencoba menyimpan image yang di-build ke Container Registry:

[EMAIL_ADDRESS] does not have storage.buckets.create access to project [PROJECT_NAME]

Anda melihat error ini karena akun layanan build Anda tidak memiliki peran Admin Penyimpanan yang diperlukan untuk menyimpan image container di Container Registry.

Build gagal karena otorisasi ssh tidak valid

Anda melihat error berikut saat menjalankan build:

Could not parse ssh: [default]: invalid empty ssh-agent socket, make sure SSH_AUTH_SOCK is set

Error ini menunjukkan masalah dengan otorisasi SSH. Contoh umum adalah error otorisasi SSH yang terjadi saat mengakses repositori GitHub pribadi dengan Cloud Build. Untuk petunjuk cara menyiapkan SSH untuk GitHub, lihat Mengakses repositori GitHub pribadi.

Build gagal karena error No route to host

Anda melihat error berikut atau yang serupa saat menjalankan build di kumpulan pribadi:

Unable to connect to the server: dial tcp 192.168.10.XX:<port>: connect: no route to host

Cloud Build menjalankan Cloud builder-nya di virtual machine dalam project yang dikelola Google menggunakan container Docker. Antarmuka bridge Docker (dan sebagai hasilnya, penampung yang terhubung ke antarmuka ini) diberi rentang IP 192.168.10.0/24, yang membuat komunikasi dengan host eksternal di subnet yang sama tidak mungkin. Saat mengalokasikan rentang IP untuk resource dalam project Anda selama konfigurasi kumpulan pribadi, sebaiknya pilih rentang di luar 192.168.10.0/24. Untuk mengetahui petunjuknya, lihat Menyiapkan lingkungan untuk kumpulan pribadi.

Koneksi ke resource eksternal gagal karena tidak ada IP eksternal yang diaktifkan

Anda melihat error berikut saat terhubung ke resource eksternal dari kumpulan pribadi:

 Failed to connect to <external_domain>: Connection timed out

Kumpulan pribadi menggunakan IP eksternal untuk mengakses resource di internet publik, seperti repositori eksternal. Saat membuat atau memperbarui kumpulan pribadi, pilih kotak untuk menetapkan IP eksternal ke kumpulan pribadi Anda. Untuk petunjuk tentang cara Membuat atau memperbarui kolom dalam kumpulan pribadi, lihat Membuat dan mengelola kumpulan pribadi.

Error waktu tunggu I/O habis

Anda melihat error berikut saat menjalankan build:

Timeout - last error: dial tcp IP_ADDRESS: i/o timeout

Error ini dapat terjadi saat build Anda mencoba mengakses resource di jaringan pribadi, tetapi gagal. Secara default, build yang dijalankan melalui Cloud Build dapat mengakses resource pribadi di internet publik seperti resource di repositori atau registry. Namun, build hanya dapat mengakses resource di jaringan pribadi jika Anda menggunakan kumpulan pribadi dan mengonfigurasinya untuk mengakses jaringan pribadi. Lihat Menggunakan Cloud Build di jaringan pribadi.

Error klien 4xx

Grup error ini menunjukkan bahwa permintaan build tidak berhasil, mungkin karena kesalahan pengguna yang mengirim permintaan. Beberapa contoh error klien 4xx adalah:

  • **Error**: 404 : Requested entity was not found
  • **Error**: 404 : Trigger not found
  • **Error**: 400 : Failed Precondition
  • **Error**: 403 : Permission denied

Saat Anda melihat error klien 4xx, lihat log build untuk melihat apakah log tersebut berisi informasi selengkapnya tentang alasan error. Beberapa penyebab umum error klien meliputi:

  • Lokasi sumber yang Anda tentukan tidak memiliki hal baru untuk di-commit dan hierarki kerja bersih. Dalam hal ini, periksa lokasi kode sumber Anda dan coba mem-build lagi.
  • Repositori Anda tidak berisi file konfigurasi build. Jika demikian, upload file konfigurasi build ke repositori Anda dan jalankan build lagi.
  • Anda telah menentukan ID pemicu yang salah.
  • Anda baru-baru ini menambahkan repositori baru setelah menginstal aplikasi GitHub, dan Cloud Build tidak memiliki izin untuk mengakses repositori baru tersebut. Jika demikian, hubungkan repositori baru Anda ke Cloud Build.
  • Anda perlu memberikan izin lain ke akun layanan build.

Build gagal karena batasan kuota

Anda melihat error berikut yang menunjukkan bahwa build gagal karena pembatasan kuota di wilayah tertentu:

Failed to trigger build: generic::failed_precondition: due to quota restrictions, cannot run builds in this region. Please contact support.

Hubungi Cloud Customer Care untuk meningkatkan kuota Anda untuk wilayah tertentu ini. Untuk mempelajari kuota dan batas lebih lanjut, lihat Kuota dan batas.

Masalah waktu tunggu saat mengambil image dari registry Docker

Anda melihat error waktu tunggu berikut di log Cloud Build setelah dijalankan:

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

Untuk mengatasi error ini, download image Docker menggunakan crane dan lanjutkan untuk memuat image ke image Docker Cloud Build.

Tambahkan cuplikan berikut ke file cloudbuild.yaml Anda.

...
  # 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: Alamat proxy HTTP Anda (misalnya, https://proxy.example.com:8888/).

Setelah image dimuat, langkah cloudbuild.yaml yang ada akan berfungsi seperti biasa, misalnya

...
  - 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

Error Unauthenticated untuk langkah Docker yang berjalan lama

Langkah build yang melibatkan perintah Docker yang berjalan selama lebih dari satu jam (seperti mendorong image besar ke Artifact Registry) dapat gagal dengan error autentikasi. Cloud Build memuat ulang token autentikasi setiap jam, tetapi Docker mungkin gagal mengambil token baru ini sehingga menyebabkan masalah autentikasi. Anda dapat menulis token Anda sendiri dengan masa aktif kustom ke file dan mereferensikannya untuk perintah Docker.

Build yang diantrekan di kumpulan pribadi yang di-peering ke jaringan VPC

Saat Anda menjalankan build di kumpulan pribadi yang memiliki jaringan produsen layanannya yang di-peering ke jaringan VPC Anda sendiri, koneksi pribadi antara kedua jaringan ini harus tetap utuh. Jika Anda menghapus koneksi pribadi yang menjadi andalan kumpulan pribadi, Anda dapat merusak kumpulan pribadi. Hal ini dapat muncul sebagai build yang tetap diantrekan hingga akhirnya habis waktu tunggunya. Oleh karena itu, jika Anda ingin menghapus koneksi pribadi, pastikan Anda juga menghapus kumpulan pribadi yang jaringan produsen layanannya terhubung ke jaringan VPC Anda sendiri menggunakan koneksi pribadi ini.

Mencoba menyetujui atau menolak build yang tertunda dan sudah lebih dari 2 bulan

Anda tidak dapat menyetujui atau menolak build yang tertunda yang sudah lebih dari 2 bulan. Mencoba melakukannya dapat mengakibatkan pesan error yang terlihat seperti ini:

 404, "message": "Requested entity was not
found.", "status": "NOT_FOUND" } }

Jika hal ini terjadi, coba kirimkan build baru.

Langkah selanjutnya