Skip to main content

Esta versão do GitHub Enterprise Server foi descontinuada em 2024-07-09. Nenhum lançamento de patch será feito, mesmo para questões críticas de segurança. Para obter melhor desempenho, segurança aprimorada e novos recursos, atualize para a última versão do GitHub Enterprise Server. Para obter ajuda com a atualização, entre em contato com o suporte do GitHub Enterprise.

Solução de problemas de erros do Controlador do Executor de Ações

Saiba como solucionar problemas de erros do Actions Runner Controller.

Aviso legal

Registro em log

Os recursos do Actions Runner Controller (ARC), que incluem o controlador, o ouvinte e os executores, gravam logs na saída padrão (stdout). Recomendamos que você implemente uma solução de registro em log para coletar e armazenar esses logs. Ter logs disponíveis pode ajudar você ou o suporte do GitHub com solução de problemas e depuração. Para obter mais informações, confira Arquitetura do registor em log na documentação do Kubernetes.

Rótulos de recursos

Os rótulos são adicionados aos recursos criados por Actions Runner Controller, que incluem os pods de controlador, ouvinte e executor. Você pode usar esses rótulos para filtrar recursos e ajudar na solução de problemas.

Pod do controlador

Os rótulos a seguir são aplicados ao pod do controlador.

app.kubernetes.io/component=controller-manager
app.kubernetes.io/instance=<controller installation name>
app.kubernetes.io/name=gha-runner-scale-set-controller
app.kubernetes.io/part-of=gha-runner-scale-set-controller
app.kubernetes.io/version=<chart version>

Pod do ouvinte

Os rótulos a seguir são aplicados aos pods do ouvinte.

actions.github.com/enterprise= # Will be populated if githubConfigUrl is an enterprise URL
actions.github.com/organization= # Will be populated if githubConfigUrl is an organization URL
actions.github.com/repository= # Will be populated if githubConfigUrl is a repository URL
actions.github.com/scale-set-name= # Runners scale set name
actions.github.com/scale-set-namespace= # Runners namespace
app.kubernetes.io/component=runner-scale-set-listener
app.kubernetes.io/part-of=gha-runner-scale-set
app.kubernetes.io/version= # Chart version

Pod do executor

Os rótulos a seguir são aplicados aos pods do executor.

actions-ephemeral-runner= # True | False
actions.github.com/organization= # Will be populated if githubConfigUrl is an organization URL
actions.github.com/scale-set-name= # Runners scale set name
actions.github.com/scale-set-namespace= # Runners namespace
app.kubernetes.io/component=runner
app.kubernetes.io/part-of=gha-runner-scale-set
app.kubernetes.io/version= # Chart version

Verificar os logs do ouvinte do conjunto de executores e controlador

Para verificar os logs do pod do controlador, você poderá usar o comando a seguir.

Bash
kubectl logs -n <CONTROLLER_NAMESPACE> -l app.kubernetes.io/name=gha-runner-scale-set-controller

Para verificar os logs do ouvinte do conjunto de executores, você poderá usar o comando a seguir.

Bash
kubectl logs -n <CONTROLLER_NAMESPACE> -l auto-scaling-runner-set-namespace=arc-systems -l auto-scaling-runner-set-name=arc-runner-set

Usando os gráficos do branch master

Recomendamos que você use os gráficos da versão mais recente em vez do branch master. O branch master é altamente instável e não podemos garantir que os gráficos no branch master funcionarão em um determinado momento.

Solução de problemas do pod do ouvinte

Se o pod do controlador estiver em execução, mas o pod do ouvinte não estiver, inspecione os logs do controlador primeiro e confira se há erros. Se não houver erros e o pod do ouvinte do conjunto de executores ainda não estiver em execução, verifique se o pod do controlador tem acesso ao servidor da API do Kubernetes em seu cluster.

Se você tiver um proxy configurado ou estiver usando um proxy sidecar injetado automaticamente, como Istio, verifique se ele está configurado para permitir o tráfego do contêiner do controlador (gerenciador) para o servidor da API do Kubernetes.

Se você instalou o conjunto de executores de dimensionamento automático, mas o pod do ouvinte não foi criado, verifique se o githubConfigSecret fornecido está correto e se o githubConfigUrl fornecido é preciso. Confira "Como se autenticar na API do GitHub" e "Como implantar conjuntos de dimensionamento de executores com o Actions Runner Controller" para obter mais informações.

Os pods do executor são recriados após uma execução de fluxo de trabalho cancelada

Depois que uma execução de fluxo de trabalho é cancelada, os eventos a seguir acontecem.

  • O sinal de cancelamento é enviado diretamente aos executores.
  • O aplicativo do executor é encerrado, o que também encerra os pods do executor.
  • No próximo poll, o sinal de cancelamento é recebido pelo ouvinte.

Poderá haver um pequeno atraso entre quando os executores recebem o sinal e quando o ouvinte recebe o sinal. Quando os pods do executor começam a terminar, o ouvinte tenta trazer novos executores para corresponder ao número desejado de executores de acordo com o estado em que está. No entanto, quando o ouvinte receber o sinal de cancelamento, ele atuará para reduzir o número de executores. Eventualmente, o ouvinte reduzirá verticalmente para o número desejado de executores. Enquanto isso, você pode conferir executores adicionais.

Erro: Name must have up to n characters

O ARC usa os nomes gerados de determinados recursos como rótulos para outros recursos. Devido a esse requisito, o ARC limita os nomes de recursos para 63 caracteres.

Como parte do nome do recurso é definida por você, o ARC impõe um limite no número de caracteres que você pode usar para o nome da instalação e o namespace.

Error: INSTALLATION FAILED: execution error at (gha-runner-scale-set/templates/autoscalingrunnerset.yaml:5:5): Name must have up to 45 characters

Error: INSTALLATION FAILED: execution error at (gha-runner-scale-set/templates/autoscalingrunnerset.yaml:8:5): Namespace must have up to 63 characters

Erro: Access to the path /home/runner/_work/_tool is denied

Você poderá ver esse erro se estiver usando o modo Kubernetes com volumes persistentes. Esse erro ocorrerá se o contêiner do executor estiver em execução com um usuário não raiz e estiver causando uma incompatibilidade de permissões com o volume montado.

Para corrigir isso, utilize uma das opções a seguir.

  • Use um tipo de volume que dê suporte a securityContext.fsGroup. Os volumes hostPath não dão suporte a essa propriedade. Enquanto volumes local e outros tipos de volumes dão suporte. Atualize o fsGroup do pod do executor para corresponder ao GID do executor. Você pode fazer isso atualizando os valores do gráfico helm gha-runner-scale-set para incluir as informações abaixo. Substitua VERSION pela versão da imagem de contêiner actions-runner que você deseja usar.

    YAML
    spec:
        securityContext:
            fsGroup: 123
        containers:
        - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
    
  • Se atualizar o securityContext do pod do executor não for uma solução viável, você poderá resolver o problema usando initContainers para alterar a propriedade do volume montado, como indicado abaixo.

    YAML
    template:
    spec:
        initContainers:
        - name: kube-init
        image: ghcr.io/actions/actions-runner:latest
        command: ["sudo", "chown", "-R", "1001:123", "/home/runner/_work"]
        volumeMounts:
            - name: work
            mountPath: /home/runner/_work
        containers:
        - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
    

Partes foram adaptadas do https://github.com/actions/actions-runner-controller/ de acordo com a licença Apache-2.0:

Copyright 2019 Moto Ishizawa

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.