Soluciona errores de compilación

En esta página, se proporcionan estrategias de solución de problemas y soluciones para algunos mensajes de error comunes 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. Los registros escritos en stdout o stderr aparecen automáticamente en la consola de Google Cloud.

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

Verás el siguiente error cuando intentes ejecutar una compilación manual:

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

Verás este error porque Cloud Build requiere que los usuarios que ejecutan compilaciones manuales y que usan el bucket de registros predeterminado de Cloud Storage tengan la función de IAM de visualizador del proyecto, además de la función de editor de Cloud Build. Para solucionar este error, puedes realizar una de las siguientes acciones:

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

Cloud Build usa una cuenta de servicio especial para ejecutar compilaciones por ti. Si la cuenta de servicio de Cloud Build no tiene los permisos necesarios para realizar una tarea, verás el siguiente error:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [CLOUD_BUILD_SERVICE_ACCOUNT]@PROJECT.iam.gserviceaccount.com

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 que se otorgará a la cuenta de servicio de Cloud Build:

Las fallas de compilación debido a la falta de permisos para la cuenta de servicio suelen ocurrir cuando se intenta implementar con Cloud Build.

Error de permiso denegado durante la implementación en Cloud Functions

Verás el siguiente error cuando intentes usar Cloud Functions:

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

Para solucionar este error, otorga la función de desarrollador de Cloud Functions a la cuenta de servicio de Cloud Build.

Error de permiso faltante cuando se implementa en Cloud Functions

Verás el siguiente error cuando intentes implementar en Cloud Functions:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [CLOUD_BUILD_SERVICE_ACCOUNT]@PROJECT.iam.gserviceaccount.com

Para solucionar este error, otorga la función Usuario de cuenta de servicio a la cuenta de servicio de Cloud Build.

Se produjo un error cuando se implementaba en App Engine

Cuando intentes realizar una implementación en App Engine, verás el siguiente error:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [CLOUD_BUILD_SERVICE_ACCOUNT]@PROJECT.iam.gserviceaccount.com

Para solucionar este error, otorga la función de administrador de App Engine a la cuenta de servicio de Cloud Build.

Se produjo un error durante la implementación en GKE

Verás el siguiente error cuando intentes realizar una implementación en GKE:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [CLOUD_BUILD_SERVICE_ACCOUNT]@PROJECT.iam.gserviceaccount.com

Para solucionar este error, otorga la función de desarrollador de GKE a la cuenta de servicio de Cloud Build.

Se produjo un error cuando se implementaba en Cloud Run

Cuando intentes realizar una implementación en Cloud Run, verás el siguiente error:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [CLOUD_BUILD_SERVICE_ACCOUNT]@PROJECT.iam.gserviceaccount.com

Verás este error porque la cuenta de servicio de Cloud Build 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

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

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

Los activadores de compilación usan la cuenta de servicio de Cloud Build para crear una compilación. El error anterior indica que a la cuenta de servicio de Cloud Build le falta el permiso de IAM cloudbuild.builds.create, que es necesario para que la cuenta de servicio ejecute un activador de compilación. Para resolver este error, otorga la función de IAM Cloud Build Service Account a [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Si quieres obtener instrucciones para otorgar este rol, consulta Configura el acceso a la cuenta de servicio de Cloud Build.

El activador falla con Couldn't read commit error

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 mediante una rama que no existe. Revisa los nombres de tus directorios para verificar que estén bien escritos y sean coherentes. Para obtener instrucciones sobre la configuración de activadores, consulta Crea y administra activadores de compilación.

No se pudo crear el activador de Pub/Sub

Cuando crees un activador de Pub/Sub, verás 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 de forma temporal Pub/Sub de los servicios restringidos en tu perímetro, crear el activador y restringir la API de Pub/Sub nuevamente para resolver el error.

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

Verás 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]

Verás este error porque la cuenta de servicio de Cloud Build no tiene la función de administrador de almacenamiento necesaria para almacenar imágenes de contenedor en Container Registry.

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

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

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 el error de autorización de SSH, que ocurre cuando se accede a repositorios privados de GitHub con Cloud Build. Si deseas obtener instrucciones sobre cómo 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 en la nube en la máquina virtual del proyecto administrado por Google con los contenedores de Docker. A la interfaz del puente de Docker (y, en consecuencia, a los contenedores conectados a esta interfaz) se le asigna un rango de IP de 192.168.10.0/24, lo que hace que la comunicación con los hosts externos en la misma subred sea imposible. Cuando asignes los rangos de IP para los recursos en tus proyectos durante la configuración del grupo privado, te recomendamos seleccionar un rango fuera de 192.168.10.0/24. Si quieres obtener instrucciones, consulta Configura tu entorno para grupos privados.

La conexión al recurso externo falla debido a que no hay ninguna 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 IP externas para acceder a los recursos en la Internet pública, como los repositorios externos. Cuando crees o actualices un grupo privado, selecciona la casilla para asignar IP externas al grupo privado. Para obtener instrucciones sobre cómo crear o actualizar campos dentro de 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 en una red privada, pero falla. De forma predeterminada, las compilaciones que se ejecutan a través de Cloud Build pueden acceder a recursos privados en la Internet pública, como recursos en un repositorio o un registro. Sin embargo, las compilaciones solo pueden acceder a los recursos en una red privada si usas grupos privados y los configuras para acceder 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 realizó correctamente, probablemente por culpa del usuario que la envió. Estos son algunos ejemplos de errores de cliente 4xx:

  • **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 tus registros de compilación para ver si contienen más información sobre el motivo del error. Algunas causas comunes de los errores de cliente incluyen las siguientes:

  • La ubicación de origen que especificaste no tiene nada nuevo para confirmar y el árbol de trabajo está limpio. En este caso, verifica la ubicación de tu código fuente y vuelve a compilarla.
  • 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 y Cloud Build no tiene permisos para acceder al repositorio nuevo. Si este es el caso, conecta tu repositorio nuevo a Cloud Build.
  • Debes otorgar otro permiso a la cuenta de servicio.

La compilación falla debido a restricciones de cuota

Verás el siguiente error, que indica que una compilación falla debido a 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 la Atención al cliente de Cloud para aumentar tus cuotas en esta región específica. 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

Verás los siguientes errores de tiempo de espera en tu registro de Cloud Build después de una ejecución:

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: Es la dirección de tu proxy HTTP (p.ej., https://proxy.example.com:8888/).

Una vez que se cargue la imagen, los pasos existentes de cloudbuid.yaml 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 Unauthenticated para pasos de Docker de larga duración

Los pasos de compilación que involucran un comando de Docker que se ejecuta durante más de una hora (como enviar una imagen grande a Artifact Registry) pueden fallar con un error de autenticación. Cloud Build actualiza los tokens de autenticación cada hora, pero es posible que Docker no los recoja, lo que genera problemas de autenticación. Puedes escribir tu propio token con una vida útil personalizada para el archivo y hacer referencia a eso para los comandos de Docker.

¿Qué sigue?