Terraform-aws-github-runner: Automatisieren Sie die Erstellung eines Offline-LĂ€ufers

Erstellt am 6. Feb. 2021  Â·  11Kommentare  Â·  Quelle: philips-labs/terraform-aws-github-runner

Der aktuelle Ansatz erfordert, dass wir immer einen Offline-Runner neu registrieren. Diese Offline-LĂ€ufer werden von Github nach 60 Tagen entfernt. Daher wĂ€re es praktisch, den Prozess zu automatisieren, um 1 Offline-LĂ€ufer zu behalten, damit wir auf 0 zurĂŒckskalieren können.

Mögliche Lösungsrichtung

Registrieren Sie sich ĂŒber die ED2-Instanz

Verwenden Sie denselben Mechanismus, den wir verwenden, um LĂ€ufer mit einem zusĂ€tzlichen Lambda zu starten, das nur die Benutzerdaten bis zum Konfigurationsschritt ausfĂŒhrt. Stellen Sie außerdem sicher, dass die ec2-Instanz heruntergefahren wird

Reverse egineer github config process

Erstellen Sie Lamda, das Github-http-Aufrufe basierend auf Reverse Engineering verwendet, siehe https://github.com/actions/runner/issues/558

FĂŒhren Sie die Konfiguration in einem Lambda aus

Erstellen Sie ein Lambda, das die Konfiguration ĂŒber eine Lambda-Ebene ausfĂŒhren kann

enhancement help wanted

Hilfreichster Kommentar

@npalm Ich habe die meisten Logik, URLs usw. herausgefunden, die mit der Registrierung eines LĂ€ufers verbunden sind. Ich plane, ein Python-Modul zu erstellen, um dies mit Python 3x und Anfragen zu handhaben. Dies wird wahrscheinlich dieses Wochenende sein, wenn ich von der Arbeit bin.

Wenn Sie es lieber selbst implementieren möchten, kann ich meine Notizen teilen, die ich zuvor ĂŒber den Prozess gesammelt habe.

Ich denke ehrlich, ich möchte mehr Zeit damit verbringen, den gesamten Prozess zu verfolgen, damit er auch Workflows abrufen und ausfĂŒhren kann, aber die neue LĂ€uferregistrierung war ein Muss fĂŒr mich.

GrundsÀtzlich funktioniert der Prozess, den ich gefunden habe:
Holen Sie sich Runner Token ĂŒber API mit Pat oder App Creds
Senden Sie ein Token an den geheimen Endpunkt, und erhalten Sie json-Daten mit einem neuen geheimen Endpunkt und einem jwt zurĂŒck
Verwenden Sie jwt, um ĂŒber den Auth Bearer-Header zu authentifizieren. Verwenden Sie dazu den neu aufgedeckten Endpunkt, können Sie vorhandene "Agenten" (wie sie in der API genannt werden) abfragen, einen neuen hinzufĂŒgen oder einen vorhandenen aktualisieren.

Es gibt offensichtlich einige weitere Details, einschließlich der Erstellung eines RSA-SchlĂŒssels und einer Reihe von Headern. Ich habe noch nicht weiter als bis zur Registrierung gesucht ...

Alle 11 Kommentare

@npalm Ich habe die meisten Logik, URLs usw. herausgefunden, die mit der Registrierung eines LĂ€ufers verbunden sind. Ich plane, ein Python-Modul zu erstellen, um dies mit Python 3x und Anfragen zu handhaben. Dies wird wahrscheinlich dieses Wochenende sein, wenn ich von der Arbeit bin.

Wenn Sie es lieber selbst implementieren möchten, kann ich meine Notizen teilen, die ich zuvor ĂŒber den Prozess gesammelt habe.

Ich denke ehrlich, ich möchte mehr Zeit damit verbringen, den gesamten Prozess zu verfolgen, damit er auch Workflows abrufen und ausfĂŒhren kann, aber die neue LĂ€uferregistrierung war ein Muss fĂŒr mich.

GrundsÀtzlich funktioniert der Prozess, den ich gefunden habe:
Holen Sie sich Runner Token ĂŒber API mit Pat oder App Creds
Senden Sie ein Token an den geheimen Endpunkt, und erhalten Sie json-Daten mit einem neuen geheimen Endpunkt und einem jwt zurĂŒck
Verwenden Sie jwt, um ĂŒber den Auth Bearer-Header zu authentifizieren. Verwenden Sie dazu den neu aufgedeckten Endpunkt, können Sie vorhandene "Agenten" (wie sie in der API genannt werden) abfragen, einen neuen hinzufĂŒgen oder einen vorhandenen aktualisieren.

Es gibt offensichtlich einige weitere Details, einschließlich der Erstellung eines RSA-SchlĂŒssels und einer Reihe von Headern. Ich habe noch nicht weiter als bis zur Registrierung gesucht ...

@gertjanmaas Ich denke, Ihnen wird der obige Kommentar gefallen

@ miked63017 lass es mich wissen, wenn du nicht dazu kommst. Wir suchen auch danach, damit ich etwas Zeit hÀtte, daran zu arbeiten.

Bearbeiten: Nicht sicher, ob Sie gesehen haben, aber dies ist neu fĂŒr Python veröffentlicht: https://github.blog/2020-12-18-learn-about-ghapi-a-new-third-party-python-client-for- the-github-api /

@npalm @mcaulifn hier ist ein Link, es ist immer noch ziemlich beta'isch und nicht gut dokumentiert, aber ich denke, wir können das Gleiche ĂŒber die Runner / Actions-API im Allgemeinen sagen :-)

https://github.com/miked63017/pyghrunner

@mcaulifn in RE zum Ghapi-Modul sieht es cool aus, aber die meisten dieser Aufrufe sind undokumentierte Teile der API und können sich wahrscheinlich Àndern.

Insgesamt sieht es so aus, als ob es funktionieren sollte. Planen Sie, es diesem Repo hinzuzufĂŒgen?

@gertjanmaas irgendeine Meinung?

@npalm @mcaulifn Ich bin mir nicht sicher, ob ich den Kontext habe, um ihn hier zu diesem Repo hinzuzufĂŒgen. Ich arbeite persönlich in einem GKE-Operator, um Ă€hnliche Aktionen auszufĂŒhren , dachte jedoch, dass dies anderen helfen könnte, einfachen Code fĂŒr die Integration in andere Projekte zu teilen. Scheint eine ziemlich hĂ€ufige Anforderung fĂŒr diese FunktionalitĂ€t zu sein. Wenn Sie möchten, dass ich ĂŒber eine PR hier etwas hinzufĂŒge, kann ich dieses Wochenende vielleicht etwas Zeit verbringen.

Ich habe den Python-Code schnell durchgesehen und er scheint zu bestĂ€tigen, was ich gesehen habe, als ich vor einiger Zeit versucht habe, ihn zurĂŒckzuentwickeln. WĂ€re toll, wenn dies hier umgesetzt werden könnte. Es wird mĂŒde, Offline-LĂ€ufer von Hand hinzuzufĂŒgen: P.

@gertjanmaas, wo ich (das Äquivalent) dieses Codes (in einer privaten Bibliothek) ausfĂŒhre, fĂŒhren wir nur die wenigen Methoden regelmĂ€ĂŸig oder als Reaktion auf ein Ereignis aus und ĂŒberschreiben den vorherigen "virtuellen LĂ€ufer". Wir verwenden es im Grunde nur als Platzhalter, damit Jobs eher in die Warteschlange gestellt werden als fehlschlagen, da keine LĂ€ufer mit Beschriftungen vorhanden sind. Dann schauen wir uns die Jobdetails an und drehen den entsprechenden LĂ€ufer mit den entsprechenden Beschriftungen nach Bedarf und mit dem Flag --once hoch.

Ich habe noch PlĂ€ne fĂŒr weitere Untersuchungen zur Erstellung eines vollstĂ€ndigen benutzerdefinierten LĂ€ufers, der höchstwahrscheinlich in Python geschrieben ist und dann an anderen Stellen eingebettet werden kann. Das hat fĂŒr mich einfach noch keine hohe PrioritĂ€t.

Wie wÀre es mit einer Abmeldung von LÀufern?

Der Offline-LÀufer muss grundsÀtzlich alle 30 Tage neu erstellt werden, um niemals 0 LÀufer in der Organisation zu haben.

Dies sollte ebenfalls automatisiert werden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen