Risoluzione degli errori delle build

Questa pagina fornisce strategie di risoluzione dei problemi e soluzioni per alcuni messaggi di errore comuni che potresti visualizzare durante l'esecuzione di una build.

Hai controllato i log di compilazione?

Utilizza i log di compilazione di Logging o Cloud Storage per ottenere ulteriori informazioni sull'errore di compilazione. I log scritti in stdout o stderr vengono visualizzati automaticamente nella console Google Cloud.

Le build manuali non riescono perché l'utente non ha accesso ai log di compilazione

Quando provi a eseguire una compilazione manualmente, viene visualizzato il seguente errore:

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

Questo errore si verifica perché Cloud Build richiede che gli utenti che eseguono le build manuali e utilizzano il bucket dei log Cloud Storage predefinito dispongano del ruolo IAM Visualizzatore progetto oltre al ruolo Editor di Cloud Build. Per risolvere il problema, puoi procedere in uno dei seguenti modi:

Le build non riescono a causa di autorizzazioni dell'account di servizio mancanti

Se l'account di servizio che utilizzi per la compilazione non dispone dell'autorizzazione necessaria per eseguire un'attività, viene visualizzato un errore simile al seguente:

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

Per risolvere questo errore, concedi all'account di servizio l'autorizzazione richiesta. Utilizza le informazioni riportate nelle pagine seguenti per determinare l'autorizzazione da concedere al tuo account di servizio di compilazione:

I fallimenti di build dovuti a autorizzazioni mancanti per gli account di servizio di build si verificano spesso quando si tenta di eseguire il deployment utilizzando Cloud Build.

Errore di autorizzazione negata durante il deployment nelle funzioni Cloud Run

Quando provi a utilizzare le funzioni Cloud Run, viene visualizzato il seguente errore:

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

Per risolvere questo errore, concedi il ruolo Sviluppatore di funzioni Cloud Run al tuo account di servizio di compilazione.

Errore di autorizzazione mancante durante il deployment nelle funzioni Cloud Run

Quando provi a eseguire il deployment nelle funzioni Cloud Run, viene visualizzato un errore simile al seguente:

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

Per risolvere questo errore, concedi il ruolo Utente account di servizio al tuo account di servizio specificato dall'utente o all'account di servizio predefinito.

Errore durante il deployment su App Engine

Quando provi a eseguire il deployment su App Engine, viene visualizzato un errore simile al seguente:

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

Per risolvere questo errore, concedi il ruolo Amministratore App Engine al tuo account di servizio specificato dall'utente o all'account di servizio predefinito.

Errore durante il deployment su GKE

Quando provi a eseguire il deployment su GKE, viene visualizzato un errore simile al seguente:

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

Per risolvere questo errore, concedi il ruolo Sviluppatore GKE al tuo account di servizio di compilazione.

Errore durante il deployment su Cloud Run

Quando provi a eseguire il deployment su Cloud Run, viene visualizzato un errore simile al seguente:

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

Questo errore si verifica perché l'account di servizio di compilazione non dispone delle autorizzazioni IAM richieste per il deployment su Cloud Run. Per informazioni su come concedere le autorizzazioni necessarie, consulta Eseguire il deployment su Cloud Run.

L'attivatore di compilazione non riesce a causa dell'autorizzazione cloudbuild.builds.create mancante

Quando esegui un attivatore di compilazione, viene visualizzato un errore simile al seguente:

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

Gli attivatori di build utilizzano un account di servizio per creare una build. Questo errore indica che all'account di servizio manca l'autorizzazione IAM cloudbuild.builds.create, necessaria per l'esecuzione di un trigger di compilazione. Puoi risolvere questo errore concedendo il ruolo IAM Cloud Build Service Account all'account di servizio specificato dall'utente o all'account di servizio predefinito.

Impossibile inviare la compilazione a causa di autorizzazioni dell'agente di servizio mancanti

Se l'agente di servizio Cloud Build viene eliminato o non dispone delle autorizzazioni, potrebbe verificarsi il seguente errore durante l'invio di una compilazione.

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.

L'utente che chiama in questo scenario è l'agente di servizio Cloud Build. Per risolvere questo problema di autorizzazione:

  1. Assicurati che l'agente di servizio Cloud Build esista. Puoi visualizzare l'agente di servizio per un progetto andando alla pagina IAM nella console Google Cloud e selezionando la casella di controllo Mostra account di servizio gestiti da Google. Se non è presente, puoi crearlo eseguendo il seguente comando gcloud CLI:

    gcloud beta services identity create --service=cloudbuild.googleapis.com \
        --project=PROJECT_ID
    
  2. Poi, concedi il ruolo IAM roles/cloudbuild.serviceAgent all'agente di servizio 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"
    

Per verificare quale identità IAM è stata potenzialmente responsabile del problema di autorizzazione dell'agente di servizio, segui questi passaggi:

  1. Apri Esplora log nella console Google Cloud:

    Vai a Esplora log

  2. Inserisci il seguente testo nel campo della query:

    resource.type="project"
    log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    "service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    
  3. Se dopo aver utilizzato questa query vengono visualizzate voci di log, controlla se alcune di queste rimuovono le autorizzazioni dall'agente di servizio (service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com). In questo caso, esamina protoPayload.authenticationInfo.principalEmail nel log per determinare l'identità IAM responsabile della rimozione dell'autorizzazione o del ruolo roles/cloudbuild.serviceAgent contenente l'autorizzazione elencata nel messaggio di errore.

L'attivatore non riesce con l'errore Couldn't read commit

Quando esegui un trigger di compilazione, viene visualizzato il seguente errore:

  Failed to trigger build: Couldn't read commit

Cloud Build restituisce questo messaggio se stai tentando di attivare una compilazione utilizzando un ramo che non esiste. Controlla l'ortografia e la coerenza dei nomi delle directory. Per istruzioni sulla configurazione degli attivatori, vedi Creare e gestire gli attivatori di build.

Impossibile creare l'trigger Pub/Sub

Quando crei un trigger Pub/Sub, viene visualizzato il seguente errore:

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

Questo errore indica che l'API Pub/Sub è limitata nel tuo progetto. I progetti che limitano l'API Pub/Sub limitano la possibilità di creare abbonamenti push. Per risolvere l'errore, puoi rimuovere temporaneamente Pub/Sub dai servizi con limitazioni nel tuo perimetro, creare l'attivatore e limitare di nuovo l'API Pub/Sub.

Errore durante l'archiviazione delle immagini in Container Registry

Quando la compilazione tenta di archiviare le immagini create in Container Registry, viene visualizzato un errore simile al seguente:

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

Questo errore si verifica perché il tuo account di servizio di compilazione non ha il ruolo Amministratore Storage necessario per archiviare le immagini container in Container Registry.

Le build non riescono a causa di un'autorizzazione SSH non valida

Quando esegui una compilazione, viene visualizzato il seguente errore:

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

Questo errore indica un problema con l'autorizzazione SSH. Un esempio comune è l'errore di autorizzazione SSH che si verifica quando si accede ai repository privati GitHub con Cloud Build. Per istruzioni su come configurare SSH per GitHub, consulta Accesso ai repository privati GitHub.

Le build non riescono a causa di un errore No route to host

Quando esegui una build in un pool privato, viene visualizzato il seguente errore o uno simile:

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

Cloud Build esegue i propri strumenti Cloud Build sulla macchina virtuale nel progetto gestito da Google utilizzando i container Docker. All'interfaccia bridge di Docker (e di conseguenza ai contenuti dei container collegati a questa interfaccia) viene assegnato un intervallo IP di 192.168.10.0/24, il che rende impossibile la comunicazione con gli agenti esterni nella stessa subnet. Quando assegni gli intervalli IP per le risorse dei tuoi progetti durante la configurazione del pool privato, ti consigliamo di selezionare un intervallo diverso da 192.168.10.0/24. Per le istruzioni, consulta Configurare l'ambiente per i pool privati.

La connessione alla risorsa esterna non riesce perché non è stato attivato alcun IP esterno

Quando ti connetti a una risorsa esterna da un pool privato, viene visualizzato il seguente errore:

 Failed to connect to <external_domain>: Connection timed out

I pool privati utilizzano indirizzi IP esterni per accedere alle risorse su internet pubblico, come i repository esterni. Quando crei o aggiorni un pool privato, seleziona la casella per assegnare gli IP esterni al pool privato. Per istruzioni su come creare o aggiornare i campi all'interno del tuo pool privato, consulta Creare e gestire i pool privati.

Errore di timeout I/O

Quando esegui una compilazione, viene visualizzato il seguente errore:

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

Questo errore può verificarsi quando la compilazione tenta di accedere alle risorse di una rete privata, ma non riesce. Per impostazione predefinita, le build eseguite tramite Cloud Build possono accedere alle risorse private nella rete internet pubblica, ad esempio le risorse in un repository o un registry. Tuttavia, le build possono accedere alle risorse in una rete privata solo se utilizzi pool privati e li configuri per accedere alla rete privata. Consulta Utilizzare Cloud Build in una rete privata.

Errori client 4xx

Questo gruppo di errori indica che la richiesta di compilazione non è andata a buon fine presumibilmente per colpa dell'utente che ha inviato la richiesta. Ecco alcuni esempi di errori client 4xx:

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

Quando viene visualizzato un errore client 4xx, controlla i log di compilazione per verificare se contengono maggiori informazioni sul motivo dell'errore. Ecco alcune cause comuni degli errori del client:

  • La posizione di origine specificata non contiene nulla di nuovo da committare e l'albero di lavoro è pulito. In questo caso, controlla la posizione del codice sorgente e riprova a compilare.
  • Il tuo repository non contiene un file di configurazione della build. In questo caso, carica un file di configurazione della build nel tuo repository ed esegui di nuovo la build.
  • Hai specificato un ID attivatore errato.
  • Di recente hai aggiunto un nuovo repository dopo aver installato l'app GitHub e Cloud Build non dispone delle autorizzazioni per accedere al nuovo repository. In questo caso, connetti il nuovo repository a Cloud Build.
  • Devi concedere un'altra autorizzazione al tuo account di servizio di compilazione.

La compilazione non riesce a causa di limitazioni della quota

Viene visualizzato il seguente errore che indica che una build non va a buon fine a causa di limitazioni relative alle quote in una determinata regione:

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

Contatta l'Assistenza clienti Google Cloud per aumentare le quote per questa regione specifica. Per saperne di più su quote e limiti, consulta Quote e limiti.

Problemi di timeout durante il pull delle immagini dal registry Docker

Nel log di Cloud Build dopo un'esecuzione vengono visualizzati i seguenti errori di timeout:

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

Per risolvere l'errore, scarica l'immagine Docker utilizzando crane e caricala nell'immagine Docker di Cloud Build.

Aggiungi il seguente snippet al file 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: l'indirizzo del proxy HTTP (ad es. https://proxy.example.com:8888/).

Una volta caricata l'immagine, i passaggi cloudbuid.yaml esistenti dovrebbero funzionare normalmente, ad esempio

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

Errori Unauthenticated per i passaggi Docker di lunga durata

I passaggi di compilazione che richiedono un comando Docker in esecuzione per più di un'ora (ad esempio il push di un'immagine di grandi dimensioni in Artifact Registry) potrebbero non riuscire a causa di un errore di autenticazione. Cloud Build aggiorna i token di autenticazione ogni ora, ma Docker potrebbe non riuscire a rilevare questi nuovi token, causando problemi di autenticazione. Puoi scrivere il tuo token con una durata personalizzata da salvare e utilizzarlo come riferimento per i comandi Docker.

Build in coda in un pool privato in peering con una rete VPC

Quando esegui build in un pool privato la cui rete del producer di servizi è in peering con la tua rete VPC, è importante che la connessione privata tra queste due reti rimanga intatta. Se elimini la connessione privata su cui si basa un pool privato, puoi interrompere il pool privato. Ciò può verificarsi come build che rimangono in coda fino al timeout. Pertanto, se vuoi eliminare una connessione privata, assicurati di eliminare anche i pool privati la cui rete del producer di servizi era connessa alla tua rete VPC utilizzando questa connessione privata.

Tentativo di approvare o rifiutare build in attesa risalenti a più di 2 mesi fa

Non puoi approvare o rifiutare build in attesa più vecchie di 2 mesi. Se provi a farlo, potresti visualizzare un messaggio di errore simile al seguente:

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

In questo caso, prova a inviare una nuova build.

Passaggi successivi