Résoudre les erreurs de compilation

Cette page propose des stratégies de dépannage, ainsi que des solutions à certains messages d'erreur courants susceptibles de s'afficher lors de l'exécution d'une compilation.

Avez-vous consulté les journaux de compilation ?

Utilisez les journaux de compilation Logging ou Cloud Storage pour obtenir plus d'informations sur l'erreur de compilation. Les journaux écrits dans stdout ou stderr s'affichent automatiquement dans la console Google Cloud.

Les compilations manuelles échouent, car l'utilisateur n'a pas accès aux journaux de compilation

L'erreur suivante s'affiche lorsque vous tentez d'exécuter une compilation manuelle :

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

Cette erreur s'affiche, car Cloud Build exige que les utilisateurs qui exécutent des compilations manuelles et utilisent le bucket de journaux Cloud Storage par défaut disposent du rôle IAM de lecteur de projet en plus du rôle d'éditeur Cloud Build. Pour résoudre cette erreur, vous pouvez effectuer l'une des opérations suivantes :

Les compilations échouent en raison d'autorisations de compte de service manquantes

Si le compte de service que vous utilisez pour votre compilation ne dispose pas des autorisations nécessaires pour effectuer une tâche, le message d'erreur suivant s'affiche :

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

Pour résoudre cette erreur, accordez l'autorisation requise au compte de service. Utilisez les informations fournies dans les pages suivantes pour déterminer l'autorisation à accorder à votre compte de service de compilation :

Les échecs de compilation dus à un défaut d'autorisations du compte de service de compilation se produisent généralement lors d'une tentative de déploiement à l'aide de Cloud Build.

Erreur "Autorisation refusée" lors du déploiement sur des fonctions Cloud Run

L'erreur suivante s'affiche lorsque vous essayez d'utiliser des fonctions Cloud Run:

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

Pour résoudre cette erreur, accordez le rôle Développeur de fonctions Cloud Run à votre compte de service de compilation.

Erreur d'autorisation manquante lors du déploiement sur des fonctions Cloud Run

Le message d'erreur suivant s'affiche lorsque vous tentez de déployer des fonctions Cloud Run :

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

Pour résoudre cette erreur, accordez le rôle Utilisateur du compte de service à votre compte de service spécifié par l'utilisateur ou compte de service par défaut.

Erreur lors du déploiement sur App Engine

Le message d'erreur suivant s'affiche lorsque vous tentez un déploiement sur App Engine :

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

Pour résoudre cette erreur, accordez le rôle "Administrateur App Engine" à votre compte de service spécifié par l'utilisateur ou compte de service par défaut.

Erreur lors du déploiement sur GKE

L'erreur suivante s'affiche lorsque vous tentez d'effectuer un déploiement sur GKE:

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

Pour résoudre cette erreur, accordez le rôle de développeur GKE à votre compte de service de compilation.

Erreur lors du déploiement sur Cloud Run

L'erreur suivante s'affiche lorsque vous tentez d'effectuer un déploiement sur Cloud Run:

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

Cette erreur s'affiche, car votre compte de service de compilation ne dispose pas des autorisations IAM requises pour effectuer un déploiement sur Cloud Run. Pour plus d'informations sur l'octroi des autorisations nécessaires, consultez la section Déploiement sur Cloud Run.

Échec du déclencheur de compilation en raison d'une autorisation cloudbuild.builds.create manquante

L'erreur suivante s'affiche lorsque vous exécutez un déclencheur de compilation :

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

Les déclencheurs de compilation créent une compilation à l'aide d'un compte de service. Cette erreur indique que le compte de service ne dispose pas de l'autorisation IAM cloudbuild.builds.create, nécessaire pour que le compte de service exécute un déclencheur de compilation. Vous pouvez résoudre cette erreur en accordant le rôle Cloud Build Service Account IAM au compte de service spécifié par l'utilisateur ou le compte de service par défaut.

Échec de l'envoi du build en raison d'autorisations manquantes de l'agent de service

Si l'agent de service Cloud Build est supprimé ou ne dispose pas des autorisations nécessaires, l'erreur suivante peut s'afficher lors de l'envoi d'une compilation.

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'appelant dans ce scénario est l'agent de service Cloud Build. À résoudre ce problème d'autorisation, procédez comme suit:

  1. Assurez-vous que l'agent de service Cloud Build existe. Vous pouvez afficher l'agent de service d'un projet en accédant à la page IAM de la console Google Cloud et en cochant la case Afficher les comptes de service gérés Google. Si il n'y est pas, vous pouvez le créer en exécutant la commande suivante : Commande gcloud CLI:

    gcloud beta services identity create --service=cloudbuild.googleapis.com \
        --project=PROJECT_ID
    
  2. Attribuez ensuite le rôle IAM roles/cloudbuild.serviceAgent au Agent de service 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 vous souhaitez vérifier quelle identité IAM est potentiellement responsable à l'origine du problème d'autorisation de l'agent de service, puis procédez comme suit:

  1. Ouvrez l'explorateur de journaux dans la console Google Cloud:

    Accéder à l'explorateur de journaux

  2. Saisissez le texte suivant dans le champ "Requête" :

    resource.type="project"
    log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    "service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    
  3. Si vous voyez des entrées de journal après avoir utilisé cette requête, vérifiez si l'une d'elles supprime des autorisations de l'agent de service (service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com). Si c'est le cas, examinez l'protoPayload.authenticationInfo.principalEmail dans ce journal pour déterminer l'identité IAM responsable de la suppression de l'autorisation ou du rôle roles/cloudbuild.serviceAgent contenant l'autorisation indiquée dans le message d'erreur.

Échec du déclencheur avec erreur Couldn't read commit

L'erreur suivante s'affiche lors de l'exécution d'une compilation :

  Failed to trigger build: Couldn't read commit

Cloud Build renvoie ce message si vous essayez de déclencher une compilation à l'aide d'une branche qui n'existe pas. Vérifiez l'orthographe des noms de vos répertoires et de cohérence. Pour savoir comment configurer les déclencheurs, consultez Créer et gérer des déclencheurs de compilation.

Impossible de créer un déclencheur Pub/Sub

L'erreur suivante s'affiche lors de la création d'un déclencheur Pub/Sub:

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

Cette erreur indique que l'API Pub/Sub est limitée dans votre projet. Les projets qui limitent l'API Pub/Sub limitent la possibilité de créer des abonnements push. Vous pouvez supprimer temporairement Pub/Sub des services restreints de votre périmètre, créer le déclencheur et à nouveau restreindre l'API Pub/Sub pour résoudre l'erreur.

Erreur lors du stockage d'images dans Container Registry

L'erreur suivante s'affiche lorsque votre compilation tente de stocker des images compilées dans Container Registry :

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

Cette erreur s'affiche, car votre compte de service de compilation ne dispose pas du rôle d'administrateur d'espace de stockage nécessaire pour stocker des images de conteneurs dans Container Registry.

Les compilations échouent en raison d'une autorisation SSH non valide

L'erreur suivante s'affiche lors de l'exécution d'une compilation :

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

Cette erreur indique un problème d'autorisation SSH. Un exemple courant d'erreur d'autorisation SSH se produit lors de l'accès aux dépôts GitHub privés avec Cloud Build. Pour obtenir des instructions sur la configuration de SSH pour GitHub, consultez la page Accéder aux dépôts GitHub privés.

Les compilations échouent en raison d'une erreur No route to host

L'erreur suivante ou similaire s'affiche lorsque vous exécutez une compilation dans un pool privé :

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

Cloud Build exécute ses compilateurs Cloud sur la machine virtuelle dans le projet géré par Google à l'aide des conteneurs Docker. Une plage d'adresses IP 192.168.10.0/24 est attribuée à l'interface du pont Docker (et par conséquent aux conteneurs connectés à cette interface), ce qui rend la communication avec les hôtes externes du même sous-réseau impossible. Lors de l'allocation des plages d'adresses IP des ressources de vos projets lors de la configuration du pool privé, nous vous recommandons de sélectionner une plage en dehors de 192.168.10.0/24. Pour obtenir des instructions, consultez la page Configurer votre environnement pour les pools privés.

Échec de la connexion à une ressource externe, car aucune adresse IP externe n'est activée

L'erreur suivante s'affiche lorsque vous vous connectez à une ressource externe à partir d'un pool privé :

 Failed to connect to <external_domain>: Connection timed out

Les pools privés utilisent des adresses IP externes pour accéder aux ressources comme des dépôts externes. Lors de la création ou de la mise à jour d'un pool privé, cochez la case permettant d'attribuer des adresses IP externes d'un pool d'utilisateurs. Pour obtenir des instructions sur la création ou la mise à jour de champs dans votre pool privé, consultez la section Créer et gérer des pools privés.

Erreur de délai avant expiration d'E/S

L'erreur suivante s'affiche lors de l'exécution d'une compilation :

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

Cette erreur peut se produire lorsque votre compilation tente d'accéder aux ressources d'un réseau privé, mais échoue. Par défaut, les compilations exécutées via Cloud Build peuvent accéder à des ressources privées sur l'Internet public, telles que des ressources dans un dépôt ou un registre. Toutefois, les compilations ne peuvent accéder aux ressources d'un réseau privé que si vous utiliser des pools privés et les configurer pour accéder au réseau privé. Consultez la section Utiliser Cloud Build dans un réseau privé.

Erreurs de client 4xx

Ce groupe d'erreurs indique que la requête de compilation n'a probablement pas abouti en raison de la défaillance de l'utilisateur qui envoie la requête. Voici quelques exemples d'erreurs client 4xx :

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

Lorsqu'une erreur client 4xx s'affiche, consultez vos journaux de compilation pour vérifier s'ils contiennent plus d'informations sur les causes de l'erreur. Voici quelques causes courantes d'erreurs client :

  • L'emplacement source que vous avez spécifié n'a aucun nouvel élément à valider et l'arborescence de travail est propre. Dans ce cas, vérifiez l'emplacement de votre code source et relancez la compilation.
  • Votre dépôt ne contient pas de fichier de configuration de compilation. Dans ce cas, importez un fichier de configuration de compilation dans votre dépôt, puis exécutez à nouveau la compilation.
  • Vous avez spécifié un ID de déclencheur incorrect.
  • Vous avez récemment ajouté un dépôt après l'installation de l'application GitHub, et Cloud Build ne dispose pas des autorisations nécessaires pour accéder au nouveau dépôt. Dans ce cas, connectez votre nouveau dépôt à Cloud Build.
  • Vous devez accorder une autre autorisation à votre compte de service de compilation.

Échec de la compilation en raison de restrictions de quota

L'erreur suivante s'affiche, qui indique qu'une compilation échoue en raison aux restrictions de quota dans une région particulière:

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

Contactez l'équipe Cloud Customer Care pour augmenter vos quotas pour cette région. Pour en savoir plus sur les quotas et les limites, consultez Quotas et limites.

Problèmes de délai avant expiration lors de l'extraction d'images à partir du registre Docker

Les erreurs de délai avant expiration suivantes s'affichent dans votre journal Cloud Build après une exécution:

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

Pour résoudre l'erreur, téléchargez l'image Docker à l'aide de crane, puis chargez l'image sur l'image Docker Cloud Build.

Ajoutez l'extrait suivant à votre fichier 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: adresse de votre proxy HTTP (par exemple, https://proxy.example.com:8888/).

Une fois l'image chargée, vos étapes cloudbuid.yaml existantes devraient fonctionner normalement, par exemple

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

Erreurs Unauthenticated pour les étapes Docker de longue durée

Les étapes de compilation impliquant une commande Docker qui s'exécute pendant plus d'une heure (comme le transfert d'une grande image vers Artifact Registry) peut échouer et générer une erreur d'authentification. Cloud Build actualise les jetons d'authentification toutes les heures, mais Docker peut ne pas détecter ces nouveaux jetons, ce qui entraîne des problèmes d'authentification. Vous pouvez écrire votre propre jeton avec une durée de vie personnalisée dans un fichier et le référencer pour les commandes Docker.

Compilations mises en file d'attente dans un pool privé associé à un réseau VPC

Lorsque vous exécutez des compilations dans un pool privé dont le réseau de producteurs de services est appairé à votre propre réseau VPC, il est important que la connexion privée entre ces deux réseaux reste intacte. Si vous supprimez la connexion privée sur lequel s'appuie un pool privé, vous pouvez le casser. Cela peut se manifester par des builds qui restent en file d'attente jusqu'à ce qu'ils expirent. Par conséquent, si vous souhaitez supprimer une connexion privée, veillez également à supprimer Pools privés dont le réseau du producteur de services était connecté à votre propre VPC à l'aide de cette connexion privée.

Tentative d'approbation ou de refus de builds en attente datant de plus de deux mois

Vous ne pouvez pas approuver ni refuser les builds en attente datant de plus de deux mois. Si vous essayez de le faire, un message d'erreur semblable à celui-ci peut s'afficher :

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

Dans ce cas, essayez d'envoyer un nouveau build.

Étape suivante