Pular para o conteúdo
Página inicial da Latchkey
Comece grátis
Menu da documentação

Solução de problemas

Correções sintoma por sintoma: jobs travados em fila, um painel vazio, insights ausentes, login bloqueado e mais.

Resumo

  1. Um job travado em fila = label, monitoramento, configuração, cobrança, build de imagem ou concorrência; verifique nessa ordem.
  2. Um painel vazio quase sempre é questão de filtros ou tempo de backfill, não de dados perdidos.
  3. Todo estado bloqueado tem um indicador explícito: um banner, o sino de notificações ou a tela de ativação.
O painel do sino de notificações no dashboard
FIG. 7.1-AO sino de notificações: runners bloqueados, avisos de camada gratuita e todos os demais indicadores aparecem aqui.

Cada seção abaixo é um sintoma, com suas causas na ordem em que mais vale a pena verificá-las. A maioria dos problemas se anuncia em algum lugar: um banner no painel, uma notificação no sino ou um status em um modal. Esta tabela indica onde olhar primeiro.

SintomaPrimeira verificaçãoOnde
Job direcionado a um runner permanece em filaA string exata do labelA tabela "Your runners" na página Latchkey Runners
O painel não mostra dadosUm repositório está selecionadoOs Filters no Command & Control
Sem insights de IAO banner de processamento e a branch de análiseA página de Insights e o modal de Monitoramento
Lançamentos de runner bloqueadosEstado de trial, assinatura e camada gratuitaA página Billing e a notificação "Managed runner blocked" ou "Free tier running out"
Acesso subitamente bloqueadoStatus da assinatura (trial encerrado, Past Due, Canceled)A tela de ativação ou a página Billing

Um job direcionado a um runner Latchkey permanece em fila#

Este é o sintoma universal para qualquer coisa que impeça o provisionamento de um runner. O GitHub mantém um job em "fila" até que um runner com um label correspondente o pegue, e quando o Latchkey bloqueia ou não consegue rotear um lançamento não há erro do lado do GitHub; o job simplesmente aguarda. Isso significa que o diagnóstico sempre acontece do lado do Latchkey. Para saber como o provisionamento decide entre uma captação a quente e um início a frio quando nada está errado, veja Como funciona o provisionamento. Faça a triagem nesta ordem:

  1. 01Label correto?Preset exato ou label personalizado, sem erros de digitação
  2. 02Repo monitorado?Verifique o modal de Monitoramento
  3. 03Config habilitada?Uma configuração desabilitada para de aceitar jobs
  4. 04Cobrança OK?Estado de trial, assinatura e camada gratuita
  5. 05Imagem pronta?Builds de runner personalizado levam tempo
  6. 06No limite?Todo workspace começa com 40 jobs simultâneos, o número do plano Launch

Descarte um erro de digitação no label

O label deve ser exatamente latchkey-small, latchkey-medium, latchkey-large, latchkey-xlarge ou um dos seus labels personalizados. Como confirmar: a tabela "Your runners" na página Latchkey Runners mostra as strings exatas; compare com seu arquivo de workflow caractere por caractere (um espaço perdido ou um hífen errado já basta para não corresponder). Ambas as formas de label roteiam de forma idêntica, então runs-on: latchkey-small e runs-on: [self-hosted, latchkey-small] se comportam da mesma maneira; a forma de array não é o problema.

Confirme que o repositório está monitorado

Runners gerenciados só atendem repositórios monitorados, então um job de um repo não monitorado aguarda para sempre. Como confirmar: abra o modal de Monitoramento na barra lateral do painel (donos e admins) e verifique o toggle do repositório. Se você estiver no limite de repositórios do seu plano, novos toggles são bloqueados e o modal aponta para o upgrade; veja Gerenciando repositórios. Para um job do Latchkey CI, veja o que cada failure_reason significa.

Verifique se a configuração do runner está habilitada

Uma configuração desabilitada para de aceitar novos jobs, e jobs direcionados ao seu label ficam em fila. Como confirmar: a linha da configuração na página de Runners mostra seu estado de habilitado/desabilitado, tanto para os presets quanto para runners personalizados.

Verifique o estado de trial, assinatura e camada gratuita

Um trial expirado, uma assinatura vencida (past due ou cancelada) ou uma camada gratuita esgotada em um trial sem cartão bloqueiam todos os novos lançamentos de runner; uma camada gratuita esgotada também interrompe os jobs em execução e retém os novos até um plano começar. Como confirmar: procure no sino de notificações por uma notificação "Managed runner blocked" (um trial expirado ou uma assinatura vencida) ou pela notificação "Free tier running out" do mês (uma camada gratuita esgotada), depois abra a página Billing: o aviso de trial e o medidor de camada gratuita, ou a tela de ativação para onde vai uma assinatura past due ou cancelada, indicam em qual caso você está. Assinar, ou corrigir o método de pagamento no portal do Stripe, restaura os lançamentos no próximo despacho, geralmente em até um minuto; veja Uso de runners e minutos gratuitos. Para um job do Latchkey CI, veja o que cada failure_reason significa.

Verifique se uma imagem personalizada ainda está sendo construída

Jobs direcionados a uma nova configuração personalizada aguardam até que sua imagem termine de ser construída. Como confirmar: a linha da configuração na página de Runners mostra o status do build da imagem, e você é notificado quando o runner está pronto ("AI scan runner is ready") ou se o build falhou. Veja Runners personalizados.

Verifique o teto de concorrência

Se o limite de jobs simultâneos do seu workspace já está em uso (todo workspace começa com 40, o número do plano Launch; runners quentes ociosos e runners estacionados não ocupam vaga), jobs adicionais aguardam por uma vaga. Como confirmar: isso aparece quando muitos workflows disparam ao mesmo tempo em seus repositórios, e os jobs em fila iniciam por conta própria à medida que os jobs em execução terminam. Limites mais altos estão disponíveis; veja Limites e concorrência.

O painel não mostra dados#

Um painel vazio quase sempre significa filtros ou tempo, não dados perdidos. Verifique nesta ordem:

  1. Nenhum repositório selecionado. O Command & Control exibe os repositórios selecionados em seus Filters. Como confirmar: sem nenhum repositório selecionado, o seletor de workflows fica desativado e mostra "Select a repository first". Reset filters (Reset no Easy) seleciona de novo todos os repositórios e workflows e volta a janela Date range para os últimos 30 dias.
  2. Backfill ainda em execução. Um repositório recém-habilitado importa o histórico recente primeiro, e a maioria das equipes vê dados em poucos minutos. Como confirmar: o banner de progresso do backfill aparece no painel até que a importação seja concluída; aguarde ele desaparecer antes de avaliar as páginas.
  3. Nenhuma execução na janela. O backfill cobre execuções concluídas dos últimos 30 dias, e a janela Date range deve se sobrepor à atividade real. Como confirmar: as execuções de workflow recentes do repositório no GitHub mostram se a última execução é anterior à janela de backfill e, se for, as páginas permanecem vazias até que novas execuções ocorram. A janela padrão, os últimos 30 dias, coincide com a janela de backfill.
  4. App instalado na org errada. Se o GitHub App não estiver instalado na organização que possui os repositórios, nenhum evento chega. Como confirmar: no GitHub, abra as Settings da organização, depois GitHub Apps, e verifique se o Latchkey está listado lá. Corrija instalando na organização correta; veja Instale o GitHub App.

Nenhum insight de IA está aparecendo#

A geração de insights é automática e orientada a eventos; não há botão para apertar. O agente é executado após o backfill inicial de um repositório recém-monitorado, quando um arquivo de workflow muda na branch de análise, em falhas consecutivas repetidas, em um pico de custo e em degradação de desempenho. Então "sem insights" geralmente significa que o gatilho ainda não disparou, ou que o agente está olhando para uma branch diferente da sua:

  • Análise ainda em execução ou ainda não disparada. Insights são gerados automaticamente após o backfill ser concluído. Como confirmar: a página de Insights mostra um banner de processamento enquanto o agente é executado; dê a um novo repositório alguns minutos.
  • Branch de análise errada. A análise segue a branch de análise escolhida no modal de Monitoramento (a branch padrão do repositório por padrão); workflows que existem apenas em outras branches não são analisados. Como confirmar: abra o modal de Monitoramento e verifique o seletor de branch ao lado do repositório. Veja Gerenciando repositórios.
  • Legitimamente pouco a dizer. Workflows pequenos ou raramente executados podem produzir poucas recomendações; isso é um achado, não uma falha. Editar um arquivo de workflow reaciona a análise, então volte a verificar após a sua próxima mudança de workflow.

Aplicar recomendações falhou ou descartou mudanças#

As recomendações são geradas com base no arquivo de workflow como ele existia no momento da análise. Se o arquivo mudou desde então (suas edições, ou um PR do Latchkey anteriormente mesclado), algumas recomendações deixam de se aplicar de forma limpa:

  • O Latchkey abre o PR com o que ainda se encaixa e lista as recomendações que precisam de colocação manual. O PR chega com o título "Latchkey insight: <what it does>" (por exemplo "Latchkey insight: pin GitHub Actions to commit SHAs") em uma branch latchkey/insight-<detector>-<hex>, e um banner de sucesso leva você diretamente a ele.
  • Se todas as recomendações selecionadas foram descartadas, não tente novamente o conjunto desatualizado. Editar o workflow dispara uma nova análise; aguarde ela terminar (o banner de processamento na página de Insights desaparece), então aplique a partir do conjunto novo. Veja Insights de otimização.

Um pagamento falhou e o acesso está bloqueado#

Um status Past Due significa que um pagamento falhou: o acesso ao painel e à API é bloqueado e os lançamentos de runner param até que o método de pagamento seja corrigido no portal do Stripe, onde métodos de pagamento, faturas (com PDFs) e detalhes da assinatura são gerenciados. Se a assinatura foi Canceled em vez disso, o acesso é bloqueado mas a cobrança permanece acessível para que você possa reassinar. Seus dados são retidos em ambos os casos. Os status e seus efeitos estão listados em Gerenciando sua assinatura.

Não consigo usar o painel no meu celular#

Isso é intencional por enquanto: o painel precisa de uma tela de tablet, laptop ou desktop, e uma tela mais estreita que 768 px mostra um aviso após o login com o título "A larger screen is needed". Notificações por email, Slack e push, além do resumo semanal, mantêm você informado longe da sua mesa.

Instalei o app na minha conta pessoal#

Essa instalação está conectada, e a conta executa o Latchkey CI nos repositórios que você registra pelo painel. Um job do GitHub Actions de um repositório registrado direcionado a um label latchkey-* não roda em um runner do Latchkey, e o Latchkey diz por quê: "Latchkey on GH needs a GitHub organization. This personal account runs Latchkey CI: commit a workflow file under .latchkey/workflows/ and push." Arquivos de workflow descreve o arquivo. Para usar o Latchkey on GH (os runners gerenciados do Latchkey no GitHub Actions) com um repositório em uma conta pessoal, mova-o para uma organização como mostra Instale o GitHub App.

Meu trial encerrou e está tudo bloqueado#

Seus dados estão intactos; o bloqueio é no acesso, não no armazenamento. O painel é substituído por uma tela "Your free trial has ended", o acesso à API é bloqueado com a mesma mensagem, e os lançamentos de runner gerenciado são bloqueados (jobs direcionados a labels latchkey-* permanecem em fila no GitHub em vez de dar erro). Assine a partir da tela de ativação (ou da página Billing, se você conseguir alcançá-la) e o acesso, incluindo os lançamentos de runner, é restaurado imediatamente. Há um trial gratuito por pessoa, e assinar ou mudar de plano não o reinicia. Veja Planos e o trial gratuito.

O que significa o failure_reason de um job#

Quando o próprio Latchkey encerra um job do Latchkey CI, em vez de o seu comando decidir o resultado, o failure_reason do job é um dos valores abaixo. Cada valor é a palavra exata que o Latchkey registra, por isso não é traduzido.

Falhas do próprio Latchkey#

ValorO que significaPode tentar novamente
provisioning_deadline_exceededO Latchkey não deu um runner a este job a tempo, então ele nunca começou.sim
provisioning_claim_abandonedO Latchkey começou a preparar um runner para este job e não terminou.sim
runner_lost_before_startO runner atribuído a este job desapareceu antes de o job começar.sim
runner_lost_heartbeat_deadO runner parou de responder antes de o job terminar.sim
runner_lost_timeout_exceededO Latchkey perdeu o contato com o runner e parou de esperar. NÃO é o mesmo que o timeout_exceeded do agente, que é o próprio comando do cliente rodando por tempo demais.sim
runner_reaped_max_age_exceededO Latchkey tirou o runner de serviço enquanto o job estava nele.sim
runner_reaped_timeout_exceededO Latchkey tirou o runner de serviço depois que ele passou do seu limite.sim
runner_reaped_heartbeat_deadO Latchkey tirou o runner de serviço depois que ele parou de responder.sim
pending_deadline_exceededO job esperou mais do que o Latchkey permite sem começar.sim
no_capacityO Latchkey não tinha um runner desse tamanho para este job e parou de tentar.sim, e um tamanho menor tem mais chance de ser alocado
requeue_cap_exceededO Latchkey não conseguiu alocar este job em um runner dentro do seu limite de tentativas.sim
not_queued_at_final_attemptO Latchkey fez a sua última tentativa de alocação e o job não estava mais esperando.sim
claim_contended_at_final_attemptDois componentes do Latchkey tentaram assumir este job ao mesmo tempo e nenhum dos dois o concluiu.sim
unbound_pipelineO Latchkey não conseguiu vincular este job a um pipeline. Todo job carrega uma identidade de pipeline, então isto é um defeito do nosso lado, e não um problema com o seu comando.não, uma nova tentativa chega ao mesmo ponto; reporte
blocked: token_life_below_launch_floorO Latchkey não conseguiu emitir uma credencial que durasse mais que o job e não conseguiu encontrar a posição do job na fila do Latchkey para tentar de novo mais tarde, então encerrou o job.sim
blocked: concurrency_limitEste workspace estava no seu limite de concorrência, e o Latchkey não conseguiu encontrar a posição do job na fila do Latchkey para mantê-lo lá, então encerrou o job.sim, assim que um job em execução terminar
forge_provider_unsupportedO Latchkey ainda não suporta este host de código.não; é uma lacuna do nosso lado
refused: runner_cannot_read_secretsO runner que recebeu este job roda um agente do Latchkey antigo demais para lidar com os segredos deste job com segurança, então o Latchkey encerrou o job antes que qualquer etapa rodasse e não cobrou por ele.sim
refused: runner_cannot_prepare_servicesO Latchkey verificou cada runner que recebeu este job antes de o job começar e passou o job para outro runner cada vez que um runner não conseguia rodar os serviços do job. Ele encerrou o job quando não restava nenhuma tentativa, antes que qualquer etapa rodasse, e não cobrou por ele.sim
context_fetch_failedO Latchkey não conseguiu preparar o contexto que guardava para este job, então o seu comando nunca rodou. Essa falha é atestada pelo próprio Latchkey; quando o job reporta a mesma palavra, ela vale como as palavras do próprio job, descritas abaixo das tabelas.sim, uma nova execução envia o contexto de novo

Cancelamentos feitos por você#

ValorO que significaPode tentar novamente
cancel_requested_before_runningVocê cancelou este job antes de ele começar.sim, enviando de novo
cancelled_before_provisioningVocê cancelou este job enquanto o Latchkey ainda preparava um runner.sim, enviando de novo

Conexão e registro#

ValorO que significaO que resolve
not_enrolledEste repositório não está registrado no Latchkey CI.registre-o pelo painel
no_connectionO Latchkey não tem conexão com o host de código deste repositório.reconecte em Settings, Code hosts
connection_deletedA conexão sob a qual este repositório rodava foi excluída.reconecte em Settings, Code hosts
connection_suspendedO app do Latchkey está suspenso nesta conta, então o Latchkey não consegue ler o repositório.remova a suspensão nas configurações do seu host de código
connection_credential_unusableA credencial que o Latchkey guarda para esta conexão não funciona mais.desinstale o app do Latchkey da conta no seu host de código e depois reconecte em Settings, Code hosts
repo_grant_revokedO app do Latchkey não tem mais acesso a este repositório.conceda o acesso de novo nas configurações do seu host de código
tenant_mismatchEste repositório está conectado a outro workspace do Latchkey.verifique o workspace; reporte se você acredita que ele está certo
forge_provider_mismatchEste repositório pertence a um host de código diferente do da conexão que o Latchkey mantém para ele.reconecte o repositório ao host certo
repository_not_identifiedO Latchkey não conseguiu identificar a qual repositório este job pertence.registre o repositório de novo
repository_not_foundO Latchkey não encontrou este repositório no host de código.verifique se ele ainda existe e se o acesso ainda está concedido
repository_identity_unusableO Latchkey guarda uma identidade para este repositório que não consegue mais usar.registre o repositório de novo

Cobrança e elegibilidade#

ValorO que significaO que resolve
refused: no_subscriptionEste workspace não tem plano, então o Latchkey não iniciou o job.escolha um plano; se você já tem um, fale com o suporte
blocked: no_subscriptionMesma causa de refused: no_subscription, registrada no lançamento em vez de na oferta.escolha um plano; se você já tem um, fale com o suporte
refused: trial_expiredO trial terminou, então o Latchkey não iniciou o job.escolha um plano; se o seu trial ainda está ativo, fale com o suporte
blocked: trial_expiredMesma causa de refused: trial_expired, registrada no lançamento.escolha um plano; se o seu trial ainda está ativo, fale com o suporte
refused: subscription_inactiveA assinatura não está ativa, então o Latchkey não iniciou o job.reative a cobrança; se ela já está ativa, fale com o suporte
blocked: subscription_inactiveMesma causa de refused: subscription_inactive, registrada no lançamento.reative a cobrança; se ela já está ativa, fale com o suporte
refused: eligibility_lapsed_at_offerO workspace deixou de estar apto a rodar jobs entre o envio deste job e o seu início.verifique a cobrança; se ela parece correta, fale com o suporte
blocked: spend_cap_reachedO Latchkey recusou ou parou o job porque o workspace atingiu o limite de gastos definido por um owner ou admin.aumente o limite ou aguarde a redefinição
stopped: spend_cap_reachedO Latchkey recusou ou parou o job porque o workspace atingiu o limite de gastos definido por um owner ou admin.aumente o limite ou aguarde a redefinição
stopped: free_allowance_reachedO Latchkey parou o job porque o workspace usou todos os minutos incluídos e não tem plano.escolha um plano ou aguarde a redefinição
budget_reachedO Latchkey parou o job quando ele atingiu o orçamento com que foi iniciado (budget_usd no job, ou --budget no latchkey run). Você não é cobrado além desse orçamento.inicie-o de novo com um orçamento maior se o trabalho precisar de mais

A sua própria entrada#

ValorO que significaPode tentar novamente
command_spawn_failedO Latchkey não conseguiu iniciar o seu comando porque um dos valores de ambiente que você definiu contém um byte NUL. O comando nunca rodou.não, não até que o valor seja alterado. Correção: remova o byte NUL do valor de ambiente indicado.
blocked: secret_scope_refusedUm segredo que uma das etapas deste job referencia não existe mais neste repositório nem no seu workspace: ele foi excluído depois que a execução entrou na fila, então o Latchkey encerrou o job antes que ele rodasse e não cobrou por ele.não, não até que o segredo seja definido de novo. Correção: defina-o para este repositório ou para o seu workspace, ou remova a referência do arquivo de workflow.

Dois tipos de failure_reason são abertos, então nenhuma tabela consegue listá-los. O primeiro é um motivo que o próprio job reportou: o Latchkey o mostra como as palavras do próprio job, e o check Latchkey fica vermelho. Um deles, context_fetch_failed, significa que o job não conseguiu buscar o contexto que o Latchkey guardava para ele. Quando o Latchkey confirma a falha como sua (o contexto que ele guardava está ausente), o check fica neutro e a linha e a CLI dizem isso; quando não consegue, o check continua vermelho, com as palavras do próprio job. Outro deles, service <label> could not start, é uma falha do Latchkey quando o próprio runner falhou ao iniciar o serviço (a escrita do nome de host, o mecanismo de containers sem responder ou recusando o início, ou o cliente desse mecanismo não preparado) e do seu job quando o rótulo já é um nome de host no runner, ou quando a imagem não pôde ser baixada, parou ou não ficou pronta a tempo; o log do job diz qual é o caso, com as próprias palavras do registry quando um download é recusado, e no caso do Latchkey o check fica vermelho mesmo assim até que o Latchkey consiga confirmar essa falha por conta própria. O Latchkey verifica o runner antes que um job com serviços comece e, quando essa verificação prova que o runner não consegue rodá-los (o cliente do mecanismo de containers não pode ser preparado, o mecanismo recusa criar uma rede, falta o privilégio de escrever nomes de host ou, em um runner com início a frio para o job, o mecanismo não responde), o job passa para outro runner em vez disso. Um job que esgota as tentativas dessa forma termina com refused: runner_cannot_prepare_services da primeira tabela, e o check não fica vermelho. O segundo é launch_failed: seguido do nome de um erro: o Latchkey não conseguiu iniciar um runner para o job, o que é uma falha do Latchkey como as da primeira tabela, e é seguro tentar novamente.

Ainda travado?#

O FAQ cobre as respostas rápidas. Para qualquer outra coisa, o Suporte e Send feedback no menu Account and help chegam diretamente à equipe.

Meu job está preso em queued. O que verifico primeiro?

Seis coisas, nesta ordem: o label do runner, se o repositório está monitorado, a configuração do runner, o estado da cobrança, um build de imagem ainda em andamento e o teto de concorrência. Cada um tem um sinal explícito, então percorrer a lista encontra a causa mais rápido do que adivinhar.

Meu painel está vazio. Para onde foram meus dados?

Quase sempre são os filtros ou o tempo da importação, e não dados perdidos. Reset filters seleciona de novo todos os repositórios e workflows e volta a janela Date range para os últimos 30 dias; se o workspace é novo, a importação dos últimos 30 dias pode ainda estar em andamento.

Instalei o GitHub App na minha conta pessoal. E agora?

A instalação está conectada, e essa conta executa o Latchkey CI: registre o repositório pelo painel e, depois, faça commit de um arquivo de workflow em .latchkey/workflows/ e dê push. O Latchkey on GH exige uma organização do GitHub; Instale o GitHub App mostra como mover um repositório para uma.