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. Journaux écrits dans stdout ou stderr apparaissent 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

Cloud Build utilise un compte de service spécial pour exécuter des compilations en votre nom. Si le compte de service Cloud Build 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 [CLOUD_BUILD_SERVICE_ACCOUNT]@PROJECT.iam.gserviceaccount.com

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 au compte de service Cloud Build :

Les échecs de compilation dus à un défaut d'autorisations du compte de service 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 Cloud Functions

L'erreur suivante s'affiche lorsque vous essayez d'utiliser Cloud Functions:

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

Pour résoudre cette erreur, accordez le rôle de développeur Cloud Functions au compte de service Cloud Build.

Erreur d'autorisation manquante lors du déploiement sur Cloud Functions

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

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

Pour corriger cette erreur, accordez le rôle Utilisateur du compte de service au Compte de service Cloud Build.

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 [CLOUD_BUILD_SERVICE_ACCOUNT]@PROJECT.iam.gserviceaccount.com

Pour résoudre cette erreur, accordez le rôle d'administrateur App Engine au compte de service Cloud Build.

Erreur lors du déploiement sur GKE

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

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

Pour résoudre cette erreur, accordez le rôle de développeur GKE au compte de service Cloud Build.

Erreur lors du déploiement sur Cloud Run

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

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

Cette erreur s'affiche, car le compte de service Cloud Build 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 lors de l'exécution d'une compilation :

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

Les déclencheurs de compilation utilisent le compte de service Cloud Build pour créer une compilation. L'erreur ci-dessus indique que le compte de service Cloud Build ne dispose pas de l'autorisation IAM cloudbuild.builds.create, ce qui est nécessaire pour que le compte de service exécute un déclencheur de compilation. Vous pouvez résoudre ce problème en accordant l'autorisation Cloud Build Service Account rôle IAM sur [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Pour obtenir des instructions sur l'attribution de ce rôle, consultez la section Configurer l'accès pour le compte de service Cloud Build.

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

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 le 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 dans votre périmètre, créer le déclencheur et 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 le compte de service Cloud Build 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 build tente d'accéder aux ressources dans un environnement réseau, mais échoue. Par défaut, les compilations exécutées via Cloud Build peuvent accéder aux ressources privées de l'Internet public, telles que les ressources d'un dépôt registre. Toutefois, les builds 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é. Voir 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 au compte de service.

É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 Cloud Customer Care pour obtenir une augmentation des quotas pour dans cette région particulière. 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 de code 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 parviennent pas à récupérer 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 Commandes Docker.

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

Lorsque vous exécutez des compilations dans un pool privé disposant de son réseau de producteurs de services à votre propre réseau VPC, il est important que la connexion privée entre ces deux réseaux reste intact. Si vous supprimez la connexion privée sur lequel s'appuie un pool privé, vous pouvez le casser. Cela peut apparaissent comme des compilations qui restent en file d'attente jusqu'à ce qu'elles 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.

Étape suivante