Skip to main content

Redimensionamento automático com executores auto-hospedados

Você pode dimensionar automaticamente seus executores auto-hospedados em resposta a eventos de webhooks.

Sobre o dimensionamento automático

Você pode aumentar ou diminuir automaticamente o número de executores auto-hospedados no seu ambiente em resposta aos eventos do webhook que você recebe com uma determinada etiqueta. Por exemplo, você poderá criar uma automação que adiciona um novo executor auto-hospedado sempre que receber um evento de webhook workflow_job com a atividade queued, o que notifica você de que um novo trabalho está pronto para processamento. A carga do webhook inclui dados da etiqueta. Portanto, você pode identificar o tipo de executor que a tarefa está solicitando. Depois que o trabalho for concluído, crie uma automação que remove o executor em resposta à atividade workflow_job completed.

Soluções de dimensionamento automático com suporte

O GitHub recomenda o uso de actions/actions-runner-controller para o dimensionamento automático dos seus executores. Para obter mais informações, confira "Sobe o Controlador de Executores de Ação".

Usaar executores efêmeros para dimensionamento automático

GitHub recomenda implementar o dimensionamento automático com executores auto-hospedados efêmeros. Nãose recomenda o dimensionamento automático com executores auto-hospedados persistentes. Em certos casos, GitHub não pode garantir que os trabalhos não sejam atribuídos a executores persistentes enquanto eles são desativados. Com executores efêmeros, é possível garantir iss, porque GitHub só atribui um trabalho a um executor.

Esta abordagem permite que você gerencie os seus executores como sistemas efêmeros, já que você pode usar automação para fornecer um ambiente limpo para cada trabalho. Isso ajuda a limitar a exposição de quaisquer recursos sensíveis de trabalhos anteriores e também ajuda a mitigar o risco de um executor comprometido receber novos trabalhos.

Para adicionar um executor efêmero ao seu ambiente, inclua o parâmetro --ephemeral ao registrar o executor usando config.sh. Por exemplo:

./config.sh --url https://github.com/octo-org --token example-token --ephemeral

O serviço GitHub Actions irá cancelar o resgistro do runner automaticamente depois de ter processado um trabalho. Em seguida, você poderá criar a sua própria automação que limpa o runner depois que ele tiver seu registro cancelado.

Observação: se um trabalho estiver rotulado para certo tipo de executor, mas nenhuma correspondência desse tipo estiver disponível, o trabalho não falhará imediatamente no momento da colocação na fila. Em vez disso, o trabalho permanecerá na fila até que o período de tempo limite de 24 horas expire.

Como alternativa, você pode criar executores efêmeros just-in-time usando a API REST. Para obter mais informações, confira "Pontos de extremidade da API REST para executores auto-hospedados".

Controlando atualizações de software dos executores em executores auto-hospedados

Por padrão, os executores auto-hospedados realizarão automaticamente uma atualização de software sempre que uma nova versão do executor estiver disponível. Se você usar executoresefêmeros em contêineres, isso pode gerar a atualizações de software repetidas quando uma nova versão do executor for lançada. A desabilitação das atualizações automáticas permite que você atualize a versão do executor na imagem do contêiner diretamente no seu próprio agendamento.

Para desativar as atualizações automáticas de software e instalar atualizações de software por conta própria, especifique o sinalizador --disableupdate ao registrar o executor usando config.sh. Por exemplo:

./config.sh --url https://github.com/YOUR-ORGANIZATION --token EXAMPLE-TOKEN --disableupdate

Se você desabilitar as atualizações automáticas, você ainda deverá atualizar sua versão do executor regularmente. A nova funcionalidade do GitHub Actions exige alterações no serviço do GitHub Actions e no software do executor. O executor pode não conseguir de processar corretamente os trabalhos que aproveitam novas funcioanlidades em GitHub Actions sem a atualização de um software.

Se você desabilitar as atualizações automáticas, será necessário atualizar a versão do seu executor no prazo de 30 dias a contar da nova versão disponível. O ideal é se inscrever para receber notificações de versões no repositório actions/runner. Para obter mais informações, confira "Configurar notificações".

Para obter instruções sobre como instalar a última versão do executor, confira as instruções de instalação da última versão.

Observação: se você não executar uma atualização de software em 30 dias, o serviço do GitHub Actions não colocará trabalhos na fila para o executor. Além disso, se uma atualização crítica de segurança for necessária, o serviço de GitHub Actions não colocará os trabalhos na fila do seu executor até que ele seja atualizado.

Usando webhooks para dimensionamento automático

Você pode criar seu ambiente de dimensionamento automático usando cargas recebidas do webhook workflow_job. Esse webhook está disponível nos níveis do repositório, da organização e da empresa, e a carga desse evento contém uma chave action que corresponde às fases do ciclo de vida de um trabalho de fluxo de trabalho, por exemplo, quando os trabalhos são queued, in_progress e completed. Você deverá criar a sua própria automação de dimensionamento em resposta a estas cargas de webhook.

Requisitos de autenticação

Você pode registrar e excluir os executores auto-hospedados da organização e do repositório usando a API. Para efetuar a autenticação na API, a implementação do seu dimensionamento automático pode usar um token de acesso ou um aplicativo de GitHub.

Seu token de acesso exigirá o seguinte escopo:

Para efetuar a autenticação usando um aplicativo de GitHub, este deverá ter as seguintes permissões:

  • Para repositórios, atribua a permissão administration.
  • Para organizações, atribua a permissão organization_self_hosted_runners.

Você pode registrar e excluir os executores auto-hospedados da empresa usando a API. Para efetuar a autenticação na API, sua implementação de dimensionamento automático pode usar um token de acesso.

Seu token de acesso exigirá o escopo manage_runners:enterprise.