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

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 d'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 résoudre cette erreur, accordez le rôle d'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, qui est nécessaire pour qu'il exécute un déclencheur de compilation. Vous pouvez résoudre cette erreur en attribuant le rôle IAM Cloud Build Service Account à [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Pour savoir comment attribuer ce rôle, consultez Configurer l'accès pour le compte de service Cloud Build.

Échec du déclencheur avec une 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 et la cohérence des noms de répertoire. Pour obtenir des instructions sur la configuration d'un déclencheur, 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 lorsque vous créez 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 restreindre à nouveau 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 sur l'Internet public, telles que les dépôts externes. Lors de la création ou de la mise à jour d'un pool privé, cochez la case pour attribuer des adresses IP externes à votre pool privé. Pour découvrir comment créer ou mettre à jour des champs dans votre pool privé, consultez la page 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 les ressources d'un dépôt ou d'un registre. Toutefois, les builds ne peuvent accéder aux ressources d'un réseau privé que si vous utilisez des pools privés et que vous les configurez 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 au compte de service.

Échec de la compilation en raison de restrictions de quota

L'erreur suivante s'affiche, indiquant qu'une compilation échoue en raison de restrictions de quota dans une région spécifique:

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

Contactez Cloud Customer Care afin d'augmenter vos quotas pour cette région spécifique. Pour en savoir plus sur les quotas et les limites, consultez la page Quotas et limites.

Problèmes de délai d'inactivité 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 et chargez-la 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, les é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 qui impliquent une commande Docker exécutée pendant plus d'une heure (telle que le transfert d'une image volumineuse vers Artifact Registry) peuvent échouer et renvoyer une erreur d'authentification. Cloud Build actualise les jetons d'authentification toutes les heures, mais Docker peut ne pas parvenir à 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 les commandes Docker.

Étapes suivantes