Solução de problemas de erros de compilação

Nesta página, fornecemos estratégias de solução de problemas, bem como soluções para algumas mensagens de erro comuns que podem ser exibidas ao executar uma versão.

Você analisou os registros de compilação?

Use os registros de versão do Logging ou do Cloud Storage para ver mais informações sobre o erro de versão. Registros gravados em stdout ou stderr aparecem automaticamente no console do Google Cloud.

As compilações manuais falham porque o usuário não tem acesso aos registros da versão

Você verá o seguinte erro ao tentar executar uma compilação manualmente:

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

Você vê esse erro porque o Cloud Build requer que os usuários executem versões manuais e usem obucket de registros padrão do Cloud Storage têm o papel de IAM de visualizador do projeto, além do papel de editor do Cloud Build. Para resolver esse erro, siga um destes procedimentos:

As criações falham devido à ausência de permissões da conta de serviço

O Cloud Build usa uma conta de serviço especial para executar builds em seu nome. Se a conta de serviço do Cloud Build não tiver a permissão necessária para executar uma tarefa, você verá o seguinte erro:

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

Para resolver esse erro, conceda a permissão à conta de serviço. Use as informações nas seguintes páginas para determinar a permissão a ser concedida à conta de serviço do Cloud Build:

As falhas de versão devido a permissões ausentes para a conta de serviço geralmente ocorrem ao tentar implantar usando o Cloud Build.

Erro de permissão negada ao implantar no Cloud Functions

Você verá o seguinte erro ao tentar usar o Cloud Functions:

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

Para solucionar esse erro, conceda o papel do desenvolvedor do Cloud Functions à conta de serviço do Cloud Build.

Erro de permissão ausente ao implantar no Cloud Functions

Você verá o seguinte erro ao tentar implantar no Cloud Functions:

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

Para resolver esse erro, conceda o papel de usuário da conta de serviço ao Conta de serviço do Cloud Build.

Erro ao implantar no App Engine

Você verá o seguinte erro ao tentar implantar no App Engine:

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

Para solucionar esse erro, conceda o papel Administrador do App Engine à conta de serviço do Cloud Build.

Erro ao implantar no GKE

Você verá o seguinte erro ao tentar implantar no GKE:

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

Para solucionar esse erro, conceda o papel de desenvolvedor do GKE à conta de serviço do Cloud Build.

Erro ao implantar no Cloud Run

Você verá o seguinte erro ao tentar implantar no Cloud Run:

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

Esse erro aparece porque a conta de serviço do Cloud Build não tem as permissões de IAM necessárias para a implantação no Cloud Run. Para mais informações sobre como conceder as permissões necessárias, consulte Como implantar no Cloud Run.

O gatilho de compilação falha devido à permissão cloudbuild.builds.create ausente

Você verá o seguinte erro ao executar um gatilho de compilação:

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

Os gatilhos de compilação usam a conta de serviço do Cloud Build para criar um build. O erro acima indica que a conta de serviço do Cloud Build não tem a permissão do IAM cloudbuild.builds.create, que é necessário para que a conta de serviço execute um gatilho de compilação. Você pode resolver isso ao conceder a permissão Cloud Build Service Account papel do IAM para [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Para instruções sobre como conceder esse papel, consulte Como configurar o acesso para a conta de serviço do Cloud Build.

O gatilho falha com Couldn't read commit erro

Você verá o seguinte erro ao executar um gatilho de compilação:

  Failed to trigger build: Couldn't read commit

O Cloud Build retornará essa mensagem se você estiver tentando acionar um build usando uma ramificação que não existe. Verifique a ortografia dos nomes dos diretórios e consistência. Para instruções sobre a configuração do gatilho, consulte Criar e gerenciar gatilhos de build.

Não foi possível criar o gatilho do Pub/Sub

Você vê o seguinte erro ao criar um gatilho do Pub/Sub:

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

Esse erro indica que a API Pub/Sub está restrita no seu em um projeto de IA. Projetos que restringem a API Pub/Sub limitam a capacidade de criar assinaturas de push. É possível remover temporariamente o Pub/Sub dos serviços restritos seu perímetro, crie o gatilho e restrinja a API Pub/Sub novamente para resolver o erro.

Erro ao armazenar imagens no Container Registry

Você vê o seguinte erro quando sua versão tenta armazenar imagens criadas no Container Registry:

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

Você vê esse erro porque a conta de serviço do Cloud Build não tem o papel de administrador de armazenamento necessário para armazenar imagens de contêiner no Container Registry.

As criações falham devido a uma autorização ssh inválida

Você verá o seguinte erro ao executar uma compilação:

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

Esse erro indica um problema com a autorização SSH. Um exemplo comum é o erro de autorização SSH que ocorre ao acessar repositórios particulares do GitHub com o Cloud Build. Para instruções sobre como configurar o SSH para o GitHub, consulte Como acessar repositórios particulares do GitHub.

Os builds falham devido a um erro No route to host

Você verá o seguinte erro ou semelhante ao executar um build em um pool particular:

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

O Cloud Build executa seus Cloud builders na máquina virtual do projeto gerenciado pelo Google usando os contêineres do Docker. A interface de ponte do Docker (e, consequentemente, os contêineres conectados a essa interface) recebe um intervalo de IP de 192.168.10.0/24, o que impossibilita a comunicação com os hosts externos na mesma sub-rede. Ao alocar intervalos de IP para recursos nos seus projetos durante a configuração do pool particular, recomendamos selecionar um intervalo fora de 192.168.10.0/24. Para instruções, consulte Como configurar o ambiente para pools particulares.

A conexão com o recurso externo falha porque nenhum IP externo está ativado

O seguinte erro aparece ao se conectar a um recurso externo de um pool privado:

 Failed to connect to <external_domain>: Connection timed out

Os pools particulares usam IPs externos para acessar recursos públicos como repositórios externos. Ao criar ou atualizar um pool privado, marque a caixa para atribuir IPs externos ao seu pool privado piscina. Para instruções sobre como criar ou atualizar campos em seu pool privado, consulte Como criar e gerenciar pools particulares.

Erro de tempo limite de E/S

Você verá o seguinte erro ao executar uma compilação:

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

Esse erro pode ocorrer quando seu build tenta acessar recursos em um ambiente na rede, mas falha. Por padrão, os builds executados pelo Cloud Build podem acessar recursos particulares na Internet pública, como recursos em um repositório ou de registros. No entanto, os builds só poderão acessar recursos em uma rede privada se você usar pools particulares e configurá-los para acessar a rede particular. Consulte Como usar o Cloud Build em uma rede privada.

4xx (erros de cliente)

Esse grupo de erros indica que a solicitação de versão não foi bem-sucedida devido a falha do usuário que enviou a solicitação. Veja abaixo alguns exemplos de erros de cliente 4xx:

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

Caso você veja um erro de cliente 4xx, analise os registros da versão para ver se ela contém mais informações sobre o motivo do erro. Veja algumas causas comuns dos erros do cliente:

  • O local de origem especificado não tem nada novo para confirmar, e a árvore de trabalho é limpa. Nesse caso, verifique a localização do código-fonte e tente compilar novamente.
  • Seu repositório não contém um arquivo de configuração de build. Se esse for o caso, faça upload de um arquivo de configuração da versão para seu repositório e execute a compilação novamente.
  • Você especificou um código de gatilho incorreto.
  • Recentemente, você adicionou um novo repositório depois de instalar o aplicativo GitHub. O Cloud Build não tem permissões para acessá-lo. Se esse for o caso, conecte seu novo repositório ao Cloud Build.
  • Você precisa conceder outra permissão à conta de serviço.

O build falha devido a restrições de cota

Você verá o seguinte erro, que indica que um build está falhando devido restrições de cota em uma região específica:

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

Entre em contato com o Cloud Customer Care para aumentar suas cotas para nessa região específica. Para saber mais sobre cotas e limites, consulte Cotas e limites.

Problemas de tempo limite ao extrair imagens do registro do Docker

Você verá os seguintes erros de tempo limite no registro do Cloud Build após uma execução:

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 o erro, faça o download da imagem Docker usando crane e carregue a imagem na imagem Docker do Cloud Build.

Adicione o snippet a seguir ao seu arquivo 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: o endereço do proxy HTTP (por exemplo, https://proxy.example.com:8888/).

Depois que a imagem for carregada, as etapas cloudbuid.yaml existentes devem funcionar normalmente, por exemplo,

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

Unauthenticated erros em etapas do Docker de longa duração

Etapas de build que envolvem um comando do Docker em execução por mais de uma hora (como enviando uma imagem grande para o Artifact Registry) pode falhar com um erro de autenticação. O Cloud Build atualiza os tokens de autenticação a cada hora, mas o Docker pode não conseguem retirar esses novos tokens, o que resulta em problemas de autenticação. Você pode gravar seu próprio token com um tempo de vida personalizado para arquivo e fazer referência a isso para comandos do Docker.

Builds na fila em um pool privado com peering para uma rede VPC

Quando você executa builds em um pool privado que tem uma rede do produtor de serviços com peering à sua rede VPC, é importante que a conexão particular entre as duas redes permanece intacta. Se você excluir a conexão particular que um pool privado dependia, você pode corrompê-lo. Isso pode aparecem como builds que permanecem na fila até atingirem o tempo limite. Portanto, Se você quiser excluir uma conexão privada, também exclua qualquer pools particulares com uma rede do produtor de serviços conectada à sua própria VPC usando esta conexão particular.

A seguir