Terraform-aws-github-runner: Automatize a criação de um corredor offline

Criado em 6 fev. 2021  ·  11Comentários  ·  Fonte: philips-labs/terraform-aws-github-runner

A abordagem atual requer que sempre tenhamos um corredor offline registrado. Esses runners offline são removidos pelo github a cada 60 dias. Portanto, seria conveniente automatizar o processo para manter 1 executor offline para que possamos voltar a 0.

Direção da solução potencial

Registre-se via instância ED2

Use o mesmo mecanismo que usamos para girar os runners com um lambda extra que só executa os dados do usuário até a etapa de configuração. E também garantir que a instância ec2 seja desativada

Reverse o processo de configuração do github do egineer

Crie lamda que usa chamadas http do github com base em engenharia reversa, consulte https://github.com/actions/runner/issues/558

Execute a configuração em um lambda

Crie um lambda que pode executar a configuração por meio de uma camada lambda

enhancement help wanted

Comentários muito úteis

@npalm Eu descobri a maior parte da lógica, urls, etc. envolvida no registro de um corredor. Estou pensando em fazer um módulo Python para lidar com isso usando Python 3x e solicitações. Provavelmente será neste fim de semana, quando estou de folga do trabalho.

Se você preferir implementá-lo sozinho, posso compartilhar minhas notas que reuni sobre o processo antes disso.

Sinceramente, acho que quero passar mais tempo rastreando todo o processo, para que ele possa puxar e executar fluxos de trabalho também, mas o novo registro do corredor foi essencial para mim.

Basicamente, o processo que descobri funcionar:
Obtenha o token do corredor via API usando pat ou app creds
Post token para secretish endpoint, receber de volta dados json com novo secretish endpoint e um jwt
Use jwt para autenticação por meio do cabeçalho do portador de autenticação, usando o ponto de extremidade recém-revelado, pode consultar os "agentes" existentes (como são chamados na api), adicionar um novo ou atualizar um existente.

Obviamente, há mais alguns detalhes envolvidos, incluindo a criação de uma chave RSA e um monte de cabeçalhos. Eu não procurei além do registro ainda ...

Todos 11 comentários

@npalm Eu descobri a maior parte da lógica, urls, etc. envolvida no registro de um corredor. Estou pensando em fazer um módulo Python para lidar com isso usando Python 3x e solicitações. Provavelmente será neste fim de semana, quando estou de folga do trabalho.

Se você preferir implementá-lo sozinho, posso compartilhar minhas notas que reuni sobre o processo antes disso.

Sinceramente, acho que quero passar mais tempo rastreando todo o processo, para que ele possa puxar e executar fluxos de trabalho também, mas o novo registro do corredor foi essencial para mim.

Basicamente, o processo que descobri funcionar:
Obtenha o token do corredor via API usando pat ou app creds
Post token para secretish endpoint, receber de volta dados json com novo secretish endpoint e um jwt
Use jwt para autenticação por meio do cabeçalho do portador de autenticação, usando o ponto de extremidade recém-revelado, pode consultar os "agentes" existentes (como são chamados na api), adicionar um novo ou atualizar um existente.

Obviamente, há mais alguns detalhes envolvidos, incluindo a criação de uma chave RSA e um monte de cabeçalhos. Eu não procurei além do registro ainda ...

@gertjanmaas acho que você vai gostar do comentário acima

@ miked63017 me avise se não conseguir. Também estamos procurando por isso, então eu teria algum tempo para trabalhar nisso.

Editar: não tenho certeza se você viu, mas foi lançado recentemente para Python: https://github.blog/2020-12-18-learn-about-ghapi-a-new-third-party-python-client-for- the-github-api /

@npalm @mcaulifn aqui está um link, ainda é bastante beta e não está bem documentado, mas acho que podemos dizer o mesmo sobre a API runners / actions em geral :-)

https://github.com/miked63017/pyghrunner

@mcaulifn em RE para o módulo ghapi parece legal, mas a maioria dessas chamadas são peças não documentadas da API e provavelmente sujeitas a alterações.

No geral, parece que deve funcionar. Você está planejando adicioná-lo a este repositório?

@gertjanmaas alguma opinião?

@npalm @mcaulifn não tenho certeza se tenho o contexto para adicioná-lo aqui a este repo, estou trabalhando pessoalmente em um operador GKE para fazer algo semelhante, mas percebi que isso poderia ajudar outras pessoas a compartilhar algum código simples para integração com outros projetos. Parece ser uma solicitação bastante comum para essa funcionalidade. Se você quiser que eu tente adicionar aqui por meio de um PR, talvez eu possa passar algum tempo neste fim de semana.

Eu rapidamente folheei o código Python e ele parece confirmar o que vi quando tentei fazer a engenharia reversa há algum tempo. Seria ótimo se isso pudesse ser implementado aqui. Cansado de adicionar corredores offline manualmente: P

@gertjanmaas onde estou executando (o equivalente) deste código (em uma biblioteca privada), apenas executamos alguns métodos periodicamente, ou em resposta a um evento, e sobrescrevemos o "corredor virtual" anterior. Basicamente, estamos usando-o apenas como um espaço reservado para que os trabalhos sejam enfileirados em vez de falhar porque não existem corredores com rótulos. Em seguida, examinamos os detalhes do trabalho e acionamos o runner apropriado, com os rótulos apropriados conforme necessário e com o sinalizador --once .

Ainda tenho planos de investigação adicional sobre a criação de um runner totalmente personalizado, provavelmente escrito em python, que pode então ser embutido em outros lugares. Isso simplesmente não é uma prioridade alta para mim ainda.

Que tal cancelar o registro do corredor?

O runner offline basicamente precisa ser recriado a cada 30 dias, para nunca ter 0 runners na organização.

Isso também deve ser automatizado.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

cmcconnell1 picture cmcconnell1  ·  7Comentários

mcaulifn picture mcaulifn  ·  13Comentários

mkryva picture mkryva  ·  17Comentários

Kostiantyn-Vorobiov picture Kostiantyn-Vorobiov  ·  6Comentários

rjcoupe picture rjcoupe  ·  15Comentários