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 podrías ver cuando ejecutas una compilación.

¿Consultaste los registros de compilación?

Usa los registros de Logging o de 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 deGoogle Cloud .

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

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

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

Este error se produce porque Cloud Build requiere que los usuarios que ejecutan compilaciones manuales y usan el bucket de registros predeterminado de Cloud Storage tengan el rol de IAM de visualizador del proyecto, además del rol 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

Si la cuenta de servicio que usas para tu compilación no tiene el permiso necesario para realizar una tarea, verás 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 permiso requerido a la cuenta de servicio. Usa la información de las siguientes páginas para determinar el permiso que debes otorgar a tu cuenta de servicio de compilación:

Los errores de compilación debido a la falta de permisos para las cuentas de servicio de compilación suelen ocurrir cuando se intenta realizar la implementación con Cloud Build.

Error de permiso denegado al implementar en Cloud Run Functions

Aparece el siguiente error cuando intentas usar Cloud Run Functions:

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

Para abordar este error, otorga la función de desarrollador de Cloud Run a tu cuenta de servicio de compilación.

Falta un error de permiso cuando se implementa en Cloud Run Functions

Cuando intentas realizar la implementación en Cloud Run Functions, 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 usuario de cuenta de servicio a tu cuenta de servicio especificada por el usuario o a la cuenta de servicio predeterminada.

Error al implementar en App Engine

Cuando intentes realizar la implementación en App Engine, verás 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 tu cuenta de servicio especificada por el usuario o a la cuenta de servicio predeterminada.

Error durante la implementación en GKE

Cuando intentas realizar la implementación en GKE, 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 desarrollador de GKE a tu cuenta de servicio de compilación.

Error al implementar en Cloud Run

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

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

Este error se produce porque tu cuenta de servicio de compilación no tiene los permisos de IAM necesarios para realizar la implementación en Cloud Run. Para obtener información sobre cómo otorgar los permisos necesarios, consulta Implementación en Cloud Run.

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

Cuando ejecutas un activador de compilación, ves 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 permiso de IAM cloudbuild.builds.create, que es obligatorio para que la cuenta de servicio ejecute un activador de compilación. Para resolver este error, otorga el rol de IAM Cloud Build Service Account a tu cuenta de servicio especificada por el usuario o a la cuenta de servicio predeterminada.

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

Si se borra el agente de servicio de Cloud Build o no tiene los permisos necesarios, es posible que se produzca el siguiente error cuando se envíe 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 este caso, 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. Para ver el agente de servicio de un proyecto, ve a la página IAM en la Google Cloud consola 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. A continuación, 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 deseas verificar qué identidad de IAM podría haber causado el problema de permisos del agente de servicio, sigue estos pasos:

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

    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 entradas de registro después de usar esta consulta, verifica si alguna de ellas quita permisos del agente de servicio (service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com). Si es así, consulta el 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 el mensaje de error.

El activador falla con el error Couldn't read commit

Cuando ejecutas un activador de compilación, ves el siguiente error:

  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 tus directorios para asegurarte de que no haya errores ortográficos y de que sean coherentes. Para obtener instrucciones sobre la configuración de activadores, consulta Crea y administra activadores de compilación.

No se puede crear el activador de Pub/Sub

Cuando creas un activador de Pub/Sub, ves 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 push. Para resolver el error, puedes quitar temporalmente Pub/Sub de los servicios restringidos en tu perímetro, crear el activador y volver a restringir la API de Pub/Sub.

No se pueden extraer o recuperar ramas de un repositorio privado debido al error fatal: could not read Username

Verás el siguiente error cuando intentes realizar una operación git pull o git fetch en una rama remota de un repositorio privado:

fatal: could not read Username for '<REMOTE_URL>': No such device or address

Este error es esperado en los repositorios privados, ya que el asistente de credenciales de Git se quita intencionalmente después de la clonación inicial del repositorio. Para recuperar ramas remotas de un repositorio privado, configura manualmente las credenciales de autorización (tokens de API, claves SSH) como un paso de compilación. Obtén más información para acceder a repositorios privados de GitHub.

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 el error de autorización de SSH que se produce cuando se accede a repositorios privados de GitHub con Cloud Build. Para obtener instrucciones sobre cómo configurar SSH para GitHub, consulta Accede a repositorios privados de GitHub.

Las compilaciones fallan debido al error No route to host

Cuando ejecutas una compilación en un grupo privado, ves el siguiente error o uno similar:

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

Cloud Build ejecuta sus Cloud builders en la máquina virtual del proyecto administrado por Google con los contenedores de Docker. A la interfaz de puente de Docker (y, por lo tanto, a los contenedores conectados a esta interfaz) se le asigna un rango de IP de 192.168.10.0/24, lo que imposibilita la comunicación con los hosts externos en la misma subred. 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.

La conexión al recurso externo falla porque no hay una IP externa habilitada

Cuando te conectas a un recurso externo desde un grupo privado, ves el siguiente error:

 Failed to connect to <external_domain>: Connection timed out

Los grupos privados usan IPs externas para acceder a recursos en Internet pública, como repositorios externos. Cuando crees o actualices un grupo privado, selecciona la casilla para asignar IPs externas a tu grupo privado. Si deseas obtener instrucciones para crear o actualizar campos en tu grupo privado, consulta Crea y administra grupos privados.

Error de tiempo de espera de E/S

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

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

Este error puede ocurrir cuando tu compilación intenta acceder a 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 los recursos en un repositorio o un registro. Sin embargo, las compilaciones solo pueden acceder a 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 un error del usuario que envió la solicitud. 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 del cliente 4xx, consulta los registros de compilación para ver si contienen más información sobre el motivo del error. Algunas causas comunes de errores del cliente son las siguientes:

  • La ubicación de la fuente que especificaste no tiene nada nuevo para confirmar y el árbol de trabajo está limpio. En este caso, verifica la ubicación del código fuente y vuelve a compilar.
  • Tu repositorio no contiene un archivo de configuración de compilación. Si es así, 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.
  • Agregaste recientemente un repositorio nuevo después de instalar la app de GitHub, y Cloud Build no tiene permiso para acceder al repositorio nuevo. Si es así, conecta tu nuevo repositorio 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 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 Atención al cliente de Cloud para que se aumenten tus cuotas en 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 al extraer imágenes del registro de Docker

Después de ejecutar Cloud Build, ves los siguientes errores de tiempo de espera en el registro:

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, luego, 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 cloudbuild.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 de 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 pueda recoger estos tokens nuevos, lo que genera problemas de autenticación. Puedes escribir tu propio token con una vida útil personalizada en un archivo y hacer referencia a él para los comandos de Docker.

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

Cuando ejecutas compilaciones en un grupo privado cuya red de productor de servicios está interconectada con tu propia red de VPC, es importante que la conexión privada entre estas dos redes permanezca intacta. Si borras la conexión privada de la que dependía un grupo privado, puedes interrumpir el grupo privado. Esto puede manifestarse como compilaciones que permanecen en la cola hasta que, finalmente, se agota el tiempo de espera. Por lo tanto, si deseas borrar una conexión privada, asegúrate de borrar también cualquier grupo privado cuya red de productor de servicios se haya conectado a tu propia red de VPC a través de esta conexión privada.

Intenta aprobar o rechazar compilaciones pendientes con más de 2 meses de antigüedad.

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

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

Si esto ocurre, intenta enviar una nueva compilación.

¿Qué sigue?