Programmieren in der Cloud mit Github Codespaces

Aus LinuxUser 06/2023

Programmieren in der Cloud mit Github Codespaces

© Yuri Kuzmin / 123RF.com

Völlig losgelöst

Sie möchten ein Programm aus den Quellen bauen und stellen fest, dass Ihrer Distribution die nötigen Tools und Softwarepakete in den gewünschten Versionen fehlen. Statt auf eine eigene virtuelle Maschine können Sie jetzt auf Githubs Codespaces ausweichen.

Vereinfacht gesagt bestehen Codespaces aus einem Docker-Container mit einem Linuxsystem und dem Editor Visual Studio Code als alleiniger Benutzeroberfläche (Abbildung 1). Da VSC besitzt ein integriertes Terminal und verfügt dementsprechend über eine Kommandozeile. Dank Root-Zugriff installieren Sie damit vor allem beliebige Software nach.

Abbildung 1: Codespaces erlaubt den Zugriff auf die Entwicklungsplattform per Webbrowser.

Abbildung 1: Codespaces erlaubt den Zugriff auf die Entwicklungsplattform per Webbrowser.

Ein Codespace stellt Rechenleistung (CPUs) und Speicherplatz bereit. Dafür verlangt der Betreiber selbstverständlich Geld, in diesem Fall Microsoft als Github-Besitzer. Das kostenlose Einsteigerangebot besteht aus pro Monat 120 CPU-Stunden und 15 GByte Plattenplatz. Da das kleinste System zwei CPUs mitbringt, stehen Ihnen de facto 60 Stunden Rechenzeit zur Verfügung. Das genügt für täglich etwa zwei Stunden Programmieren.

Ein einmal erstellter Codespace geht nicht verloren. Damit die Kostenuhr nicht weitertickt, wird er nach einer halben Stunde ohne Eingaben gestoppt. Github löscht gestoppte Codespaces nach 30 Tagen Inaktivität automatisch. Alternativ übernehmen Sie das manuell selbst. Gestoppte Codespaces beanspruchen lediglich Speicherplatz, kosten jedoch keine CPU-Zeit. Wenn Sie das Standard-Image nutzen, berechnet Github nur den Platz, den Ihre eigenen Dateien samt nachinstallierter Software belegen.

Die Hürden für den Einsatz von Codespaces liegen niedrig: Sie benötigen dafür zwar ein Github-Konto, müssen aber zum Beispiel keine Kreditkartennummern hinterlegen. Den aktuellen Verbrauch sehen Sie in Ihrem Profil unter den Einstellungen.

Den Link zu den Codespaces [1] platziert Github prominent im Zentrum der Webseiten. Von dort starten Sie einen neuen Codespace über Templates (Abbildung 2) oder verwalten bereits Existierende. Schneller als mit dem Blank getauften Template kommen Sie nirgends an ein lauffähiges Ubuntu heran – Ideal, um schnell etwas auszuprobieren, ohne den eigenen Rechner zuzumüllen. Mehr Nutzen bieten allerdings für den Anwendungszweck maßgeschneiderte Codespaces.

Abbildung 2: Über Templates richten Sie mit wenigen Mausklicks die passende Umgebung ein.

Abbildung 2: Über Templates richten Sie mit wenigen Mausklicks die passende Umgebung ein.

Codespace einrichten

Wer Projekte hostet, den interessiert häufig die Mitarbeit der Community. Mitentwicklern fällt das leichter, wenn das Projekt eine angepasste Konfiguration für den Codespace enthält. Das reicht von Initialisierungsskripten bis hin zu völlig eigenen Docker-Containern als Basis.

Listing 1 zeigt eine solche Definitionsdatei mit dem Namen devcontainer.json, sie liegt im Wurzelverzeichnis des Projekts. Alternativ gibt es ein verstecktes Verzeichnis .devcontainer. Als dritte Variante lassen sich mehrere alternative Konfigurationen in einer weiteren Verzeichnisebene anbieten, etwa .devcontainer/cortex-m/devcontainer.json oder .devcontainer/esp32/devcontainer.json. Eine tiefere Schachtelung gestattet das Projekt derzeit nicht, außerdem fehlen jegliche Vererbungsmechanismen.

Listing 1

devcontainer.json

{
  "name": "CircuitPython Cortex-M Build-Environment",
  "image": "mcr.microsoft.com/devcontainers/universal:2-linux",
  "postCreateCommand": ".devcontainer/cortex-m/on-create.sh",
  "remoteEnv": {
     "PATH": "/workspaces/gcc-arm-none-eabi/bin:${containerEnv:PATH}"
  }
}

Die Anpassungen aus Listing 1 sind schnell erklärt: Der Container basiert auf dem Standard-Image (Zeile 3). Nach dem Erstellen und dem Klonen des Projekts startet das Skript aus Zeile 4 . Zu guter Letzt passen die Zeilen 5 bis 7 den Suchpfad für ausführbare Dateien an.

Das Beispiel stammt aus dem offiziellen CircuitPython-Repository. Das Einrichten einer Build-Umgebung für dieses Projekt gestaltet sich nicht ganz trivial. Mit der Definitionsdatei dagegen baut das Projekt eine direkt einsatzfähige Umgebung – nach wenigen Klicks und ungefähr zehn Minuten Wartezeit.

Normalerweise klonen Sie ein Projekt lokal auf Ihre Festplatte, in dem Sie den Projektpfad kopieren und daraufhin git clone aufrufen. Bei einem Codespace nutzen Sie den Button Code, wählen dann Codespaces statt Local und klicken dort auf + (Abbildung 3). Wenn das Projekt Varianten anbietet, gehen Sie über das Dreipunktemenü + New with options… und spezifizieren die passenden Optionen im Folgedialog (Abbildung 4).

Abbildung 3: Mit wenigen Mausklicks klonen Sie Ihr Projekt.

Abbildung 3: Mit wenigen Mausklicks klonen Sie Ihr Projekt.

Abbildung 4: Im Auswahldialog legen Sie die Eckdaten für Ihr Projekt fest.

Abbildung 4: Im Auswahldialog legen Sie die Eckdaten für Ihr Projekt fest.

Anwendungsbeispiel

Zu den typischen Anwendungsfällen für Codespaces gehören Webanwendungen. Sie benötigen oft eine spezifische Version von Node.js samt Zusatzpaketen. Auf einem gewöhnlichen Entwicklerrechner entsteht schnell Chaos, sobald Sie darauf mehrere Anwendungen parallel betreuen. Ein abgeschotteter, projektspezifischer Codespace schafft da Abhilfe. Damit das Testen funktioniert, müssen Sie den Server-Port allerdings für den Browser des Entwicklers zugänglich machen.

Das hier gezeigte Beispiel stammt aus einem meiner Projekte [2]. Es geht um einen Miniserver, dessen einzige Funktion darin besteht, die lokale Zeit in einer JSON-Struktur auszugeben (Abbildung 5). Im heimischen Netz versorgt er dementsprechend Mikrokontroller mit der aktuellen Zeit, ohne dass diese mit Zeitzonen und Sommerzeit/Winterzeit herumrechnen müssen. Der Server bildet die Schnittstelle von http://worldtimeapi.org nach, die grundsätzlich dasselbe leistet, sich jedoch als notorisch unzuverlässig erweist.

Abbildung 5: Der Timeserver gibt die lokale Zeit samt etlicher Zusatzinformationen im JSON-Format aus.

Abbildung 5: Der Timeserver gibt die lokale Zeit samt etlicher Zusatzinformationen im JSON-Format aus.

Das Projekt stellt zwar keine besonderen Anforderungen an die Entwicklungsumgebung, aber Codespaces eignen sich trotzdem gut für Tests. Die Definitionsdatei aus Listing 2 startet ein passendes Image und installiert ein noch nicht im Image enthaltenes Paket nach.

Listing 2

Python-Container

{
   "name": "Python 3",
   "image": "mcr.microsoft.com/devcontainers/python:0-3.9",
   "postCreateCommand": "pip3 install --user pytz"
}

Obwohl es sich lediglich um eine kleine Konfigurationsdatei handelt, erstellt Visual Studio Code sie über einen kleinen Dialog, den Sie über die Kommandopalette erreichen (Abbildung 6). Am einfachsten funktioniert das, indem Sie in der Kommandopalette dev container eingeben und die Option Add Dev Container Configuration Files auswählen. Der folgende Dialog bietet verschiedene Varianten für das Feintuning an. Die generierte Datei enthält auskommentiert eine Reihe von Attributen wie den Befehl postCreateCommand, den Sie entsprechend Ihrer eigenen Bedürfnisse einfügen.

Abbildung 6: Die integrierte Suchfunktion hilft Ihnen dabei, die passende Konfigurationsdatei zu finden.

Abbildung 6: Die integrierte Suchfunktion hilft Ihnen dabei, die passende Konfigurationsdatei zu finden.

Starten Sie das Anwendungsprogramm aus dem Codespace heraus, gibt es den passenden Port gleich frei. Klicken Sie unter Ports Sie mit der Maus darauf, ruft der Browser anschließend die Anwendung auf (Abbildung 7). Zudem erlaubt das Projekt, Ports manuell freizugeben.

Abbildung 7: Erst eine funktionierende Portweiterleitung erlaubt den Remote-Zugriff auf das Projekt.

Abbildung 7: Erst eine funktionierende Portweiterleitung erlaubt den Remote-Zugriff auf das Projekt.

Die technischen Voraussetzungen für Codespaces sind minimal, ein zeitgemäßer Browser genügt. Wenn Sie den Quelltexteditor lokal vorhalten, nutzen Sie den direkten Weg, indem Sie das Plugin Codespaces installieren, um die Browserschicht zu überspringen. Zusätzlich zum Explorer-Fenster für lokale Dateien (links oben in der Seitenleiste) verfügen Sie danach über einen Remote-Explorer für den Zugriff auf Codespaces (Abbildung 8). Einmal über einen Klick auf den stilisierten Stecker verbunden, sehen Sie dort den Dateibaum des Remoteprojekts. Der große Vorteil dieses Setups liegt in einer merklich flüssigeren Bedienung und dem Verwenden ihrer vertrauten lokalen Konfiguration, etwa der Tastaturbelegung.

Abbildung 8: Nutzer von Visual Studio Code können direkt auf Codespaces unter Umgehung des Browser zugreifen.

Abbildung 8: Nutzer von Visual Studio Code können direkt auf Codespaces unter Umgehung des Browser zugreifen.

Fazit

Dank der geringen Hemmschwellen, die Github für die Codespaces setzt, verwandelt sich das Aufbauen einer Wegwerfumgebung in ein Kinderspiel. CPU- und Speicherausstattung reichen an moderne Desktoprechner und Laptops zwar nicht heran, aber für typische Entwickleraufgaben genügt die Rechenleistung häufig.

Entwicklerteams profitieren vermutlich am stärksten, denn ein Codespace definiert eine exakte Arbeitsumgebung. Die Abhängigkeit von individuell installierten Softwarevarianten fällt damit weg und die Ergebnisse lassen sich einfacher reproduzieren. Außerdem sinken die Hardwareanforderungen an den Client – Ein Rasperry Pi der vierten Generation mit lokal installiertem Visual Studio Code trägt ihnen vollkommen Rechnung. Auf dieser schlanken Client-Maschine können Sie sogar problemlos klassischen x64-Code entwickeln. (tle)

Infos

  1. Github Codespaces: https://github.com/codespaces
  2. Localtime-API-Projekt des Autors: https://github.com/bablokb/py-localtime-api

Der Autor

Bernhard Bablok arbeitet bei der Allianz Technology SE als SAP-HR-Entwickler. Wenn er nicht Musik hört, mit dem Radl oder zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleinkomputer. Sie erreichen ihn unter mailto:mail@bablokb.de.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 06/2023 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben