Terraform-aws-github-runner: Automatiza la creación de un corredor fuera de línea

Creado en 6 feb. 2021  ·  11Comentarios  ·  Fuente: philips-labs/terraform-aws-github-runner

El enfoque actual requiere que siempre tengamos registrado un corredor fuera de línea. Esos corredores sin conexión son eliminados por github cada 60 días. Por lo tanto, sería conveniente automatizar el proceso para mantener 1 corredor fuera de línea para que podamos volver a escalar a 0.

Posible dirección de la solución

Registrarse a través de la instancia ED2

Use el mismo mecanismo que usamos para activar los corredores con una lambda adicional que solo ejecuta los datos del usuario hasta el paso de configuración. Y también asegúrese de que se elimine la instancia ec2

Proceso de configuración de github de egineer inverso

Cree lamda que utilice llamadas http de github basadas en ingeniería inversa, consulte https://github.com/actions/runner/issues/558

Ejecuta la configuración en una lambda

Cree una lambda que pueda ejecutar la configuración a través de una capa lambda

enhancement help wanted

Comentario más útil

@npalm He descubierto la mayor parte de la lógica, las URL, etc. relacionadas con el registro de un corredor. Planeo hacer un módulo de Python para manejar esto usando Python 3x y solicitudes. Probablemente será este fin de semana cuando no esté en el trabajo.

Si prefiere implementarlo usted mismo, puedo compartir mis notas que he recopilado sobre el proceso antes de esa fecha.

Honestamente, creo que quiero dedicar más tiempo a rastrear todo el proceso, para que realmente pueda extraer y realizar flujos de trabajo también, pero el nuevo registro de corredor era imprescindible para mí.

Básicamente, el proceso que he encontrado que funciona:
Obtenga el token de corredor a través de api usando pat o credenciales de aplicación
Publicar token en un punto final secreto, recibir datos json con un nuevo punto final secreto y un jwt
Use jwt para autenticar a través del encabezado del portador de autenticación, utilizando un punto final recientemente revelado, puede consultar a los "agentes" existentes (como se les llama en la API), agregar uno nuevo o actualizar uno existente.

Obviamente, hay algunos detalles más involucrados, incluida la creación de una clave RSA y un montón de encabezados. Todavía no he mirado más allá del registro ...

Todos 11 comentarios

@npalm He descubierto la mayor parte de la lógica, las URL, etc. relacionadas con el registro de un corredor. Planeo hacer un módulo de Python para manejar esto usando Python 3x y solicitudes. Probablemente será este fin de semana cuando no esté en el trabajo.

Si prefiere implementarlo usted mismo, puedo compartir mis notas que he recopilado sobre el proceso antes de esa fecha.

Honestamente, creo que quiero dedicar más tiempo a rastrear todo el proceso, para que realmente pueda extraer y realizar flujos de trabajo también, pero el nuevo registro de corredor era imprescindible para mí.

Básicamente, el proceso que he encontrado que funciona:
Obtenga el token de corredor a través de api usando pat o credenciales de aplicación
Publicar token en un punto final secreto, recibir datos json con un nuevo punto final secreto y un jwt
Use jwt para autenticar a través del encabezado del portador de autenticación, utilizando un punto final recientemente revelado, puede consultar a los "agentes" existentes (como se les llama en la API), agregar uno nuevo o actualizar uno existente.

Obviamente, hay algunos detalles más involucrados, incluida la creación de una clave RSA y un montón de encabezados. Todavía no he mirado más allá del registro ...

@gertjanmaas Creo que te gustará el comentario de arriba

@ miked63017 avísame si no lo consigues. También estamos buscando esto, así que tendría algo de tiempo para trabajar en ello.

Editar: No estoy seguro si lo vio, pero esto se lanzó recientemente para Python: https://github.blog/2020-12-18-learn-about-ghapi-a-new-third-party-python-client-for- the-github-api /

@npalm @mcaulifn aquí hay un enlace, todavía es bastante beta y no está bien documentado, pero supongo que podemos decir lo mismo sobre la API de corredores / acciones en general :-)

https://github.com/miked63017/pyghrunner

@mcaulifn en RE para el módulo ghapi se ve bien, pero la mayoría de estas llamadas son piezas indocumentadas de la API y probablemente estén sujetas a cambios.

En general, parece que debería funcionar. ¿Está pensando en agregarlo a este repositorio?

@gertjanmaas alguna opinión?

@npalm @mcaulifn no estoy seguro de si tengo el contexto para agregarlo aquí a este repositorio, personalmente estoy trabajando en un operador de GKE para hacer algo similar, pero pensé que podría ayudar a otros a compartir un código simple para integrarlo con otros proyectos. Parece ser una solicitud bastante común para esta funcionalidad. Si desea que intente agregar aquí a través de un PR, tal vez pueda dedicar algo de tiempo este fin de semana.

Rápidamente hojeé el código de Python y parece confirmar lo que vi cuando traté de realizar ingeniería inversa hace un tiempo. Sería genial si esto pudiera implementarse aquí. Cansarse de agregar corredores fuera de línea a mano: P

@gertjanmaas donde estoy ejecutando (el equivalente) de este código (en una biblioteca privada), simplemente ejecutamos los pocos métodos periódicamente, o en respuesta a un evento, y sobrescribimos el "corredor virtual" anterior. Básicamente, lo estamos usando como un marcador de posición para que los trabajos se pongan en cola en lugar de fallar porque no existen corredores con etiquetas. Luego miramos los detalles de los trabajos y giramos el corredor apropiado, con las etiquetas apropiadas según sea necesario, y con la bandera --once .

Todavía tengo planes de investigar más a fondo la creación de un corredor personalizado completo, probablemente escrito en Python, que luego se puede incrustar en otros lugares. Esto simplemente no ha sido una alta prioridad para mí todavía.

¿Qué tal la cancelación del registro de un corredor?

Básicamente, el corredor fuera de línea debe volver a crearse cada 30 días, para que nunca haya 0 corredores en la organización.

Esto también debería estar automatizado.

¿Fue útil esta página
0 / 5 - 0 calificaciones