Esta página fornece estratégias de resolução de problemas, bem como soluções para algumas mensagens de erro comuns que pode ver quando executa uma compilação.
Consultou os registos de compilação?
Use os registos do Logging ou do Cloud Storage
para obter mais informações sobre o erro de compilação. Os registos escritos em stdout
ou stderr
aparecem automaticamente na Google Cloud consola.
As compilações manuais falham porque o utilizador não tem acesso aos registos de compilação
É apresentado 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.
Este erro é apresentado porque o Cloud Build requer que os utilizadores que executam compilações manuais e usam o contentor de registos do Cloud Storage predefinido tenham a função de IAM Leitor do projeto, além da função Editor do Cloud Build. Para resolver este erro, pode fazer uma das seguintes ações:
Use o contentor de registos predefinido e conceda a função Leitor do projeto e a função Editor do Cloud Build ao utilizador que executa a compilação. Para obter instruções sobre como conceder esta autorização, consulte o artigo Configure o acesso aos recursos do Cloud Build.
Crie o seu próprio contentor do Cloud Storage para armazenar registos. Para ver instruções, consulte o artigo Armazenar registos de compilação num contentor criado pelo utilizador.
As compilações falham devido a autorizações da conta de serviço em falta
Se a conta de serviço que está a usar para a sua compilação não tiver a autorização necessária para realizar uma tarefa, é apresentado um erro semelhante ao seguinte:
Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE ACCOUNT]
Para resolver este erro, conceda a autorização necessária à conta de serviço. Use as informações nas páginas seguintes para determinar a autorização a conceder à sua conta de serviço de compilação:
- Configure contas de serviço especificadas pelo utilizador
- Conta de serviço predefinida do Cloud Build
- Compreender as funções de IAM
- Conceder autorizações à conta de serviço predefinida do Cloud Build
As falhas de compilação devido a autorizações em falta para contas de serviço de compilação ocorrem frequentemente quando tenta implementar através do Cloud Build.
Erro de autorização recusada ao implementar funções no Cloud Run
É apresentado o seguinte erro quando tenta usar funções do Cloud Run:
ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.get' denied]
Para resolver este erro, conceda a função de programador das funções do Cloud Run à sua conta de serviço de compilação.
Erro de autorização em falta ao implementar em funções do Cloud Run
Quando tenta implementar funções no Cloud Run, é apresentado um erro semelhante ao seguinte:
Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE ACCOUNT]
Para resolver este erro, conceda a função de utilizador da conta de serviço à conta de serviço especificada pelo utilizador ou à conta de serviço predefinida.
Erro ao implementar no App Engine
Quando tenta implementar no App Engine, é apresentado um erro semelhante ao seguinte:
Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE_ACCOUNT]
Para resolver este erro, conceda a função de administrador do App Engine à conta de serviço especificada pelo utilizador ou à conta de serviço predefinida.
Erro ao implementar no GKE
Quando tenta implementar no GKE, vê um erro semelhante ao seguinte:
Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE_ACCOUNT]
Para resolver este erro, conceda a função de programador do GKE à sua conta de serviço de compilação.
Erro ao implementar no Cloud Run
Quando tenta implementar no Cloud Run, é apresentado um erro semelhante ao seguinte:
Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE_ACCOUNT]
Este erro é apresentado porque a sua conta de serviço de compilação não tem as autorizações de IAM necessárias para a implementação no Cloud Run. Para informações sobre como conceder as autorizações necessárias, consulte o artigo Implementar no Cloud Run.
O acionador de compilação falha devido à autorização cloudbuild.builds.create
em falta
Quando executa um acionador de compilação, é apresentado um erro semelhante ao seguinte:
Failed to trigger build: Permission 'cloudbuild.builds.create' denied on resource 'projects/xxxxxxxx' (or it may not exist)
Os acionadores de compilação usam uma conta de serviço para criar uma compilação. Este erro indica que a conta de serviço não tem a autorização de IAM cloudbuild.builds.create
, que é necessária para que a conta de serviço execute um acionador de compilação. Pode resolver este erro concedendo a função de IAM à conta de serviço especificada pelo utilizador ou à conta de serviço predefinida.Cloud Build Service Account
Falha no envio da compilação devido a autorizações do agente do serviço em falta
Se o agente do serviço do Cloud Build for eliminado ou não tiver autorizações, pode causar o seguinte erro ao enviar uma compilação.
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.
O autor da chamada neste cenário é o agente do serviço Cloud Build. Para resolver este problema de autorização, siga estes passos:
Certifique-se de que o agente do serviço Cloud Build existe. Pode ver o agente de serviço de um projeto acedendo à página IAM na Google Cloud consola e selecionando a caixa de verificação Mostrar contas de serviço geridas pela Google. Se não estiver lá, pode criá-lo executando o seguinte comando da CLI gcloud:
gcloud beta services identity create --service=cloudbuild.googleapis.com \ --project=PROJECT_ID
Em seguida, conceda a função do
roles/cloudbuild.serviceAgent
IAM ao agente de serviço do 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"
Se quiser verificar que identidade do IAM foi potencialmente responsável por causar o problema de autorização do agente de serviço, siga estes passos:
Abra o Explorador de registos na Google Cloud consola:
Introduza o seguinte texto no campo de consulta:
resource.type="project" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" "service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
Se vir entradas de registo depois de usar esta consulta, verifique se alguma delas está a remover autorizações do agente de serviço (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
). Se for o caso, consulte oprotoPayload.authenticationInfo.principalEmail
nesse registo para determinar a identidade de IAM responsável por remover a autorização ou a funçãoroles/cloudbuild.serviceAgent
que contém a autorização indicada na mensagem de erro.
O acionador falha com o erro Couldn't read commit
É apresentado o seguinte erro quando executa um acionador de compilação:
Failed to trigger build: Couldn't read commit
O Cloud Build devolve esta mensagem se estiver a tentar acionar uma compilação usando um ramo que não existe. Reveja os nomes dos diretórios quanto à ortografia e consistência. Para ver instruções sobre a configuração de acionadores, consulte o artigo Crie e faça a gestão de acionadores de compilação.
Não é possível criar o acionador do Pub/Sub
É apresentado o seguinte erro quando cria um acionador do Pub/Sub:
Failed to create trigger: Request is prohibited by organization's policy
Este erro indica que a API Pub/Sub está restrita no seu projeto. Os projetos que restringem a API Pub/Sub limitam a capacidade de criar subscrições push. Pode remover temporariamente o Pub/Sub dos serviços restritos no seu perímetro, criar o acionador e restringir novamente a API Pub/Sub para resolver o erro.
Não é possível extrair ou obter ramificações de um repositório privado devido ao erro: fatal: could not read Username
É apresentado o seguinte erro quando tenta executar um git pull
ou um git fetch
num ramo remoto de um repositório privado:
fatal: could not read Username for '<REMOTE_URL>': No such device or address
Este erro é esperado em repositórios privados, uma vez que o auxiliar de credenciais do Git é removido intencionalmente após a clonagem inicial do repositório. Para obter ramos remotos de um repositório privado, configure manualmente as credenciais de autorização (tokens de API, chaves SSH) como um passo de compilação. Saiba como aceder a repositórios privados do GitHub.
As compilações falham devido a uma autorização SSH inválida
Vê o seguinte erro quando executa uma compilação:
Could not parse ssh: [default]: invalid empty ssh-agent socket, make sure SSH_AUTH_SOCK is set
Este erro indica um problema com a autorização SSH. Um exemplo comum é um erro de autorização de SSH que ocorre quando acede a repositórios privados do GitHub com o Cloud Build. Para obter instruções sobre como configurar o SSH para o GitHub, consulte o artigo Aceder a repositórios privados do GitHub.
As compilações falham devido ao erro No route to host
Vê o seguinte erro ou um erro semelhante quando executa uma compilação num conjunto privado:
Unable to connect to the server: dial tcp 192.168.10.XX:<port>: connect: no route to host
O Cloud Build executa os respetivos criadores do Google Cloud na máquina virtual no projeto gerido pela Google
através dos contentores Docker. À interface de ponte do Docker (e, consequentemente, aos contentores ligados a esta interface) é atribuído um intervalo de IP de 192.168.10.0/24
, o que torna impossível a comunicação com os anfitriões externos na mesma sub-rede. Ao atribuir os intervalos de IP para recursos nos seus projetos durante a configuração do conjunto privado, recomendamos que selecione um intervalo fora de 192.168.10.0/24. Para ver instruções, consulte o artigo Configurar o seu ambiente para pools privadas.
A ligação ao recurso externo falha porque não existe nenhum IP externo ativado
É apresentado o seguinte erro quando se liga a um recurso externo a partir de um pool privado:
Failed to connect to <external_domain>: Connection timed out
As pools privadas usam IPs externos para aceder a recursos na Internet pública, como repositórios externos. Ao criar ou atualizar um conjunto privado, selecione a caixa para atribuir IPs externos ao seu conjunto privado. Para obter instruções sobre como criar ou atualizar campos no seu conjunto privado, consulte o artigo Criar e gerir conjuntos privados.
Erro de limite de tempo de E/S
Vê o seguinte erro quando executa uma compilação:
Timeout - last error: dial tcp IP_ADDRESS: i/o timeout
Este erro pode ocorrer quando a sua compilação tenta aceder a recursos numa rede privada, mas falha. Por predefinição, as compilações executadas através do Cloud Build podem aceder a recursos privados na Internet pública, como recursos num repositório ou num registo. No entanto, as compilações só podem aceder a recursos numa rede privada se usar pools privadas e as configurar para aceder à rede privada. Consulte o artigo Usar o Cloud Build numa rede privada.
Erros de cliente 4xx
Este grupo de erros indica que o pedido de criação não foi bem-sucedido, presumivelmente, por culpa do utilizador que enviou o pedido. Seguem-se alguns exemplos de erros do cliente 4xx:
**Error**: 404 : Requested entity was not found
**Error**: 404 : Trigger not found
**Error**: 400 : Failed Precondition
**Error**: 403 : Permission denied
Quando vir um erro do cliente 4xx, consulte os registos de compilação para ver se contêm mais informações sobre o motivo do erro. Algumas causas comuns de erros do cliente incluem:
- A localização de origem especificada não tem nada de novo para confirmar e a árvore de trabalho está limpa. Neste caso, verifique a localização do código fonte e tente criar novamente.
- O seu repositório não contém um ficheiro de configuração de compilação. Se for este o caso, carregue um ficheiro de configuração de compilação para o seu repositório e execute a compilação novamente.
- Especificou um ID do acionador incorreto.
- Adicionou recentemente um novo repositório após instalar a app GitHub e o Cloud Build não tem autorizações para aceder ao novo repositório. Se for este o caso, associe o novo repositório ao Cloud Build.
- Tem de conceder outra autorização à sua conta de serviço de compilação.
A compilação falha devido a restrições de quota
É apresentado o seguinte erro, que indica que uma compilação está a falhar devido a restrições de quota numa região específica:
Failed to trigger build: generic::failed_precondition: due to quota restrictions, cannot run builds in this region. Please contact support.
Contacte o Cloud Customer Care para aumentar as suas quotas para esta região específica. Para saber mais acerca das quotas e dos limites, consulte o artigo Quotas e limites.
Problemas de tempo limite ao extrair imagens do registo do Docker
Após uma execução, são apresentados os seguintes erros de limite de tempo no registo do Cloud Build:
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, transfira a imagem Docker através do crane e avance para carregar a imagem na imagem Docker do Cloud Build.
Adicione o seguinte fragmento ao ficheiro 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 seu proxy HTTP (por exemplo,https://proxy.example.com:8888/
).
Depois de a imagem ser carregada, os passos existentes do cloudbuild.yaml 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 para passos do Docker de execução prolongada
Os passos de compilação que envolvem um comando Docker executado durante mais de uma hora (como o envio de uma imagem grande para o Artifact Registry) podem 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 conseguir detetar estes novos tokens, o que resulta em problemas de autenticação. Pode escrever o seu próprio token com um tempo de vida personalizado para o registar e fazer referência ao mesmo para comandos do Docker.
Compilações em fila de espera num conjunto privado sincronizado com uma rede VPC
Quando executa compilações num pool privado que tem a respetiva rede de produtor de serviços com intercâmbio na sua própria rede da VPC, é importante que a ligação privada entre estas duas redes permaneça intacta. Se eliminar a ligação privada da qual um conjunto privado dependia, pode danificar o conjunto privado. Isto pode ser apresentado como compilações que permanecem em fila até expirarem. Por conseguinte, se quiser eliminar uma ligação privada, certifique-se de que também elimina todos os conjuntos privados cuja rede de produtor de serviços estava ligada à sua própria rede VPC através desta ligação privada.
Tentar aprovar ou rejeitar compilações pendentes com mais de 2 meses
Não pode aprovar nem rejeitar compilações pendentes com mais de 2 meses. Se tentar fazê-lo, pode receber uma mensagem de erro semelhante à seguinte:
404, "message": "Requested entity was not
found.", "status": "NOT_FOUND" } }
Se isto ocorrer, experimente enviar uma nova compilação.
O que se segue?
- Saiba como gerir registos de compilação.