Soluciona errores de compilación

En esta página, se proporcionan estrategias de solución de problemas y soluciones para algunos problemas mensajes de error que pueden aparecer cuando ejecutas una compilación.

¿Revisaste los registros de compilación?

Usa los registros de compilación de Logging o Cloud Storage. para obtener más información sobre el error de compilación. Registros escritos en stdout o stderr aparecerán automáticamente en la consola de Google Cloud.

Las compilaciones manuales fallan porque el usuario no tiene acceso a los registros de compilación

Ves el siguiente error cuando intentas ejecutar un Compila manualmente:

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

Ves este error porque Cloud Build requiere que los usuarios que ejecutan compilaciones manuales y usar bucket de registros predeterminado de Cloud Storage tener el rol de IAM Visualizador del proyecto, además de Cloud Build Editor Para solucionar este error, puedes hacer lo siguiente:

Las compilaciones fallan debido a que faltan permisos de la cuenta de servicio

Si la cuenta de servicio que usas para tu compilación no tiene los permisos permiso para realizar una tarea, verás algo como el siguiente error:

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

Para solucionar este error, otorga el permiso necesario a la cuenta de servicio. Usa la información de las siguientes páginas para determinar el permiso para otorgar a tu cuenta de servicio de compilación:

Con frecuencia ocurren fallas de compilación debido a la falta de permisos para las cuentas de servicio de compilación cuando se intenta implementar con Cloud Build.

Error de permiso denegado cuando se implementan en funciones de Cloud Run

Verás el siguiente error cuando intentes usar las funciones de Cloud Run:

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

Para solucionar este error, otorga el rol de Desarrollador de funciones de Cloud Run a tu cuenta de servicio de compilación.

Error de permiso faltante cuando se implementa en funciones de Cloud Run

Verás algo como el siguiente error cuando intentes realizar la implementación en las funciones de Cloud Run:

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

Para solucionar este error, otorga el rol Usuario de cuenta de servicio a tu cuenta de servicio especificada por el usuario o la cuenta de servicio predeterminada.

Se produjo un error cuando se implementaba en App Engine

Cuando intentas realizar la implementación en App Engine, ves un error similar al siguiente:

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

Para abordar este error, otorga el rol de administrador de App Engine a la cuenta de servicio especificada por el usuario o a la cuenta de servicio predeterminada.

Se produjo un error cuando se implementaba en GKE

Verás algo como el siguiente error cuando intentes realizar la implementación en GKE:

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

Para solucionar este error, otorga el rol de desarrollador de GKE a tu cuenta de servicio de compilación.

Error al implementar en Cloud Run

Verás algo como el siguiente error cuando intentes realizar la implementación en Cloud Run:

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

Se muestra este error porque tu cuenta de servicio de compilación no tiene los permisos de IAM necesarios para implementar en Cloud Run. Para obtener información sobre cómo otorgar los permisos necesarios, consulta Implementa en Cloud Run.

El activador de compilación falla debido a que falta el permiso cloudbuild.builds.create.

Cuando ejecutes un activador de compilación, verás un error similar al siguiente:

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

Los activadores de compilación usan una cuenta de servicio para crear una compilación. Este error indica que a la cuenta de servicio le falta el cloudbuild.builds.create Permiso de IAM, que es necesario para que se ejecute la cuenta de servicio un activador de compilación. Para resolver este error, otorga el Cloud Build Service Account Rol de IAM para la cuenta de servicio especificada por el usuario o la cuenta de servicio predeterminada.

No se pudo enviar la compilación debido a la falta de permisos del agente de servicio

Si el agente de servicio de Cloud Build está borrado o sin permisos, es posible que se produzca el siguiente error cuando enviar una compilación.

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.

En esta situación, el llamador es el agente de servicio de Cloud Build. Para resolver este problema de permisos, sigue estos pasos:

  1. Asegúrate de que exista el agente de servicio de Cloud Build. Puedes ver el agente de servicio para un proyecto en la Página de IAM en la consola de Google Cloud y selecciona la casilla de verificación Mostrar cuentas de servicio administradas por Google. Si no está allí, puedes crearla ejecutando el siguiente Comando de gcloud CLI:

    gcloud beta services identity create --service=cloudbuild.googleapis.com \
        --project=PROJECT_ID
    
  2. Luego, otorga el rol de IAM roles/cloudbuild.serviceAgent al Agente de servicio de 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"
    

Si quieres verificar qué identidad de IAM fue potencialmente responsable controlando el problema de permisos del agente de servicio, sigue estos pasos:

  1. Abre el Explorador de registros en la consola de Google Cloud:

    Ir al Explorador de registros

  2. Ingresa el siguiente texto en el campo de consulta:

    resource.type="project"
    log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    "service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    
  3. Si ves alguna entrada de registro luego de usar esta consulta, comprueba si les está quitando los permisos al agente de servicio (service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com). Si es así, observa protoPayload.authenticationInfo.principalEmail en ese registro para determinar la identidad de IAM responsable de quitar el permiso o el rol roles/cloudbuild.serviceAgent que contiene el permiso que se indica en mensaje de error.

El activador falla y muestra el error Couldn't read commit

Verás el siguiente error cuando ejecutes un activador de compilación:

  Failed to trigger build: Couldn't read commit

Cloud Build muestra este mensaje si intentas activar una compilación con una rama que no existe. Revisa los nombres de tu directorio para comprobar su ortografía. y coherencia. Para obtener instrucciones sobre la configuración del activador, consulta Crea y administra activadores de compilación.

No se puede crear el activador de Pub/Sub

Cuando creas un activador de Pub/Sub, aparece el siguiente error:

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

Este error indica que la API de Pub/Sub está restringida en tu proyecto. Los proyectos que restringen la API de Pub/Sub limitan la capacidad de crear suscripciones de envío. Puedes quitar temporalmente Pub/Sub de los servicios restringidos en en tu perímetro, crear el activador y restringir la API de Pub/Sub de nuevo para resolver el error.

Se produjo un error cuando se almacenan las imágenes en Container Registry

Verás algo como el siguiente error cuando tu compilación intente almacenar imágenes compiladas en Container Registry:

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

Ves este error porque tu cuenta de servicio de compilación no tener el rol de administrador de almacenamiento necesario para guardar imágenes de contenedores Container Registry.

Las compilaciones fallan debido a una autorización de SSH no válida

Cuando ejecutas una compilación, ves el siguiente error:

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

Este error indica un problema con la autorización de SSH. Un ejemplo común es SSH error de autorización que se produce cuando se accede a los repositorios privados de GitHub con Cloud Build. Si quieres obtener instrucciones para configurar SSH para GitHub, consulta Accede a repositorios privados de GitHub.

Las compilaciones fallan debido a un error No route to host

Verás el siguiente error o uno similar cuando ejecutes una compilación en un grupo privado:

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

Cloud Build ejecuta sus compiladores de Cloud en la máquina virtual del proyecto administrado por Google. con los contenedores de Docker. La interfaz del puente Docker (y, por lo tanto, contenedores conectados a esta interfaz) tiene asignado un rango de IP de 192.168.10.0/24, que realiza la comunicación con el en la misma subred es imposible. Cuando asignes los rangos de IP para los recursos de tus proyectos durante la configuración del grupo privado, te recomendamos que selecciones un rango fuera de 192.168.10.0/24. Para obtener instrucciones, consulta Configura tu entorno para grupos privados.

No se puede establecer la conexión al recurso externo debido a que no hay una IP externa habilitada

Verás el siguiente error cuando te conectes a un recurso externo. desde un grupo privado:

 Failed to connect to <external_domain>: Connection timed out

Los grupos privados usan IPs externas para acceder a recursos en el público en Internet, como repositorios externos. Al crear o actualizar un grupo privado, selecciona la casilla para asignar IP externas a tu piscina. Para obtener instrucciones sobre cómo crear o actualizar campos en para tu grupo privado, consulta Crea y administra grupos privados.

Error de tiempo de espera de E/S

Verás el siguiente error cuando ejecutes una compilación:

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

Este error puede ocurrir cuando tu compilación intenta acceder a los recursos de forma privada pero falla. Por defecto, las compilaciones que se ejecutan a través de Cloud Build pueden acceder recursos privados en la Internet pública, como los recursos de un repositorio o una registro. Sin embargo, las compilaciones solo pueden acceder a recursos de una red privada si usas grupos privados y los configuras para que accedan a la red privada. Consulta Cómo usar Cloud Build en una red privada.

4xx errores de cliente

Este grupo de errores indica que la solicitud de compilación no se realiza correctamente, probablemente debido a un error del usuario que envió la solicitud. Algunos ejemplos de errores de cliente 4xx son:

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

Cuando veas un error de cliente 4xx, consulta los registros de compilación para ver si contienen más información sobre el motivo del error. Algunas causas comunes por las que el cliente como los siguientes:

  • La ubicación de origen que especificaste no tiene nada nuevo para confirmar. el árbol de trabajo esté limpio. En ese caso, comprueba la ubicación de tu código fuente e intenta construyendo de nuevo.
  • Tu repositorio no contiene un archivo de configuración de compilación. Si este es el caso, sube un archivo de configuración de compilación a tu repositorio y vuelve a ejecutar la compilación.
  • Especificaste un ID de activador incorrecto.
  • Hace poco, agregaste un repositorio nuevo después de instalar la app de GitHub. Cloud Build no tiene permisos para acceder al repositorio nuevo. Si En este caso, conecta tu repositorio nuevo a Cloud Build.
  • Debes otorgar otro permiso a tu cuenta de servicio de compilación.

La compilación falla debido a restricciones de cuota

Verás el siguiente error, que indica que una compilación está fallando debido a a las restricciones de cuota en una región en particular:

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

Comunícate con Atención al cliente de Cloud para aumentar tus cuotas para esta región en particular. Para obtener más información sobre las cuotas y los límites, consulta Cuotas y límites

Problemas de tiempo de espera cuando se extraen imágenes del registro de Docker

Después de una ejecución, ves los siguientes errores de tiempo de espera en el registro de 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

Para resolver el error, descarga la imagen de Docker con crane y carga la imagen en la imagen de Docker de Cloud Build.

Agrega el siguiente fragmento a tu archivo 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: La dirección de tu proxy HTTP (p.ej., https://proxy.example.com:8888/).

Una vez que se cargue la imagen, los pasos de cloudbuid.yaml existentes deberían funcionar con normalidad, p.ej.,

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

Errores de Unauthenticated para pasos de Docker de larga duración

Pasos de compilación que implican un comando de Docker que se ejecuta durante más de una hora (como el envío de una imagen grande a Artifact Registry) puede fallar con un error de autenticación. Cloud Build actualiza los tokens de autenticación cada hora, pero Docker no se recogen estos tokens nuevos, lo que genera problemas de autenticación. Puedes escribir tu propio token con una vida útil personalizada para archivarlo y hacer referencia a él en los comandos de Docker.

Compilaciones en cola en un grupo privado con intercambio de tráfico a una red de VPC

Cuando ejecutas compilaciones en un grupo privado que tiene su red del productor de servicios intercambio de tráfico a tu propia red de VPC, es importante que la conexión privada entre estas dos redes permanece intacta. Si borras la conexión privada de la que dependía un grupo privado, puedes romper el grupo privado. Esto puede aparecerán como compilaciones que permanecen en cola hasta que se agote el tiempo de espera. Por lo tanto, Si quieres borrar una conexión privada, asegúrate de borrar también grupos privados cuya red del productor de servicios se conectó a tu propia VPC a través de esta conexión privada.

Intento de aprobar o rechazar compilaciones pendientes que tengan más de 2 meses de antigüedad

No puedes aprobar ni rechazar compilaciones pendientes que tengan más de 2 meses de antigüedad. Si intentas hacerlo, es posible que veas un mensaje de error similar al siguiente:

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

En ese caso, intenta enviar una compilación nueva.

¿Qué sigue?