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 consoleGoogle 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 :
Utilisez le bucket de journaux par défaut, puis attribuez le rôle Lecteur de projet et le rôle Éditeur Cloud Build à l'utilisateur qui exécute la compilation. Pour obtenir des instructions sur l'attribution de ce rôle, consultez la page Configurer l'accès aux ressources Cloud Build.
Créez votre propre bucket Cloud Storage pour stocker des journaux. Pour savoir comment procéder, consultez la section Stocker des journaux de compilation dans un bucket créé par l'utilisateur.
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, un message d'erreur semblable à celui-ci 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 :
- Configurer des comptes de service spécifiés par l'utilisateur
- Compte de service Cloud Build par défaut
- Présentation des rôles IAM
- Accorder des autorisations au compte de service Cloud Build par défaut
Les échecs de compilation dus à un défaut d'autorisations des comptes 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 Cloud Run Functions
L'erreur suivante s'affiche lorsque vous essayez d'utiliser Cloud Run 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 Run Functions à votre compte de service de compilation.
Erreur d'autorisation manquante lors du déploiement sur Cloud Run Functions
Le message d'erreur suivant s'affiche lorsque vous tentez un déploiement sur Cloud Run Functions :
Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE ACCOUNT]
Pour résoudre cette erreur, attribuez le rôle "Utilisateur du compte de service" à votre compte de service spécifié par l'utilisateur ou au compte de service par défaut.
Erreur lors du déploiement sur App Engine
Un message d'erreur semblable à celui-ci 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 d'administrateur App Engine à votre compte de service spécifié par l'utilisateur ou au compte de service par défaut.
Erreur lors du déploiement sur GKE
Une erreur semblable à la suivante s'affiche lorsque vous tentez 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
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 [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 ou similaire 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 utilisent un compte de service pour créer une compilation. 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 attribuant le rôle IAM Cloud Build Service Account
à votre compte de service spécifié par l'utilisateur ou au compte de service par défaut.
Échec de l'envoi de la compilation en raison d'autorisations d'agent de service manquantes
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.
Dans ce scénario, l'appelant est l'agent de service Cloud Build. Pour résoudre ce problème d'autorisation, procédez comme suit :
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 ce n'est pas le cas, vous pouvez le créer en exécutant la commande gcloud CLI suivante :
gcloud beta services identity create --service=cloudbuild.googleapis.com \ --project=PROJECT_ID
Ensuite, accordez le rôle IAM
roles/cloudbuild.serviceAgent
à l'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 du problème d'autorisation de l'agent de service, procédez comme suit :
Ouvrez l'explorateur de journaux dans la console Google Cloud :
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"
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 leprotoPayload.authenticationInfo.principalEmail
dans ce journal pour identifier l'identité IAM responsable de la suppression de l'autorisation ou du rôleroles/cloudbuild.serviceAgent
contenant l'autorisation listée dans le message d'erreur.
Le déclencheur échoue avec l'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 vos répertoires. Pour savoir comment configurer des 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 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. Pour résoudre l'erreur, 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.
Impossible d'extraire ou de récupérer des branches à partir d'un dépôt privé en raison de l'erreur suivante : fatal: could not read Username
L'erreur suivante s'affiche lorsque vous essayez d'effectuer une opération git pull
ou git fetch
sur une branche distante d'un dépôt privé :
fatal: could not read Username for '<REMOTE_URL>': No such device or address
Cette erreur est attendue sur les dépôts privés, car l'assistant d'identifiants Git est intentionnellement supprimé après le clonage initial du dépôt. Pour extraire des branches distantes d'un dépôt privé, configurez manuellement les identifiants d'autorisation (jetons d'API, clés SSH) en tant qu'étape de compilation. En savoir plus sur l'accès aux dépôts GitHub privés
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.
La connexion à une ressource externe échoue, car aucune adresse IP externe n'est activée
L'erreur suivante s'affiche lorsque vous vous connectez à une ressource externe depuis 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, comme les dépôts externes. Lorsque vous créez ou mettez à jour un pool privé, cochez la case pour attribuer des adresses IP externes à votre pool privé. Pour savoir comment créer ou modifier des champs dans votre pool privé, consultez 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 utilisez des pools privés et que vous les configurez pour accéder au réseau privé. Consultez 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, 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 pour augmenter vos quotas pour cette région spécifique. 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 d'attente 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 cloudbuild.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 (par exemple, l'envoi d'une grande image 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 les récupérer, 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é appairé à 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 laquelle s'appuyait un pool privé, vous risquez de le casser. Cela peut se traduire par des compilations qui restent en file d'attente jusqu'à ce qu'elles finissent par expirer. Par conséquent, si vous souhaitez supprimer une connexion privée, assurez-vous de supprimer également tous les pools privés dont le réseau de producteur de services était connecté à votre propre réseau 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" } }
Si cela se produit, essayez d'envoyer une nouvelle version.
Étapes suivantes
- Découvrez comment gérer les journaux de compilation.