Entwicklung in virtuellen Maschinen Rundgang in GitHub Codespaces

Von Mirco Lang

Anbieter zum Thema

Mit VS-Code und GitHub stellt Microsoft schon einen Großteil der Infrastruktur für Entwickler. Mit Codespaces wird beides auf einen virtuellen Rechner gepackt – der Arbeitsplatz im Browser.

Das Zentrum der Aufmerksamkeit bleibt auch bei Codespaces der VS-Code-Editor.
Das Zentrum der Aufmerksamkeit bleibt auch bei Codespaces der VS-Code-Editor.
(Bild: Lang / Microsoft)

GitHub Codespaces hat erst im August 2021 offiziell die breite Öffentlichkeit erreicht. Übertrieben groß scheinen die Auswirkungen vielleicht auch dehalb bislang nicht.

Das verwundert eigentlich, denn Codespaces ist nicht nur eine Möglichkeit, über den Browser auf eine Visual-Studio-Code-Instanz zugreifen zu können. Vielmehr soll es den kompletten Arbeitsplatz ersetzen, wie ihn die IT-Abteilung Mitarbeitern zur Verfügung stellt. Mit dem Unterschied, dass statt echter eine virtuelle Hardware ausgegeben wird.

Das Zentrum der Aufmerksamkeit bleibt auch bei Codespaces der VS-Code-Editor.
Das Zentrum der Aufmerksamkeit bleibt auch bei Codespaces der VS-Code-Editor.
(Bild: Lang / Microsoft)

Im Grunde ist Codespaces recht schnell erklärt: GitHub stellt frei konfigurierbare virtuelle Maschinen zur Verfügung, die an einzelne Repositories oder Organisationen gebunden werden können. Die VMs beinhalten dann eine über den Browser erreichbare VS-Code-Instanz, angepasst für die jeweilige Code-Basis, sowie benötigte Abhängigkeiten inner- und außerhalb des Editors, Voreinstellungen, Hardware-Spezifikationen und so weiter.

Codespaces lassen sich direkt über die normale GitHub-Web-Oberfläche aus einem Repo heraus erstellen und im Browser verwenden, aber auch als Visual Studio Remote Container in der Desktop-Variante von VS-Code. Technisch basiert das Ganze auf Containern, auch wenn GitHub (in Marketing-Texten) bisweilen von virtuellen Maschinen spricht.

Kurzum: Ein neuer Mitarbeiter könnte binnen weniger Minuten mit einem fertigen Rechner versorgt werden. Und ganz generell lassen sich mit wenig Aufwand Repo-spezifische Entwicklungsumgebungen erstellen und für alle Beteiligten einheitlich zur Verfügung stellen. Ein recht ähnliches Konzept bieten zum Beispiel Gitpod und andere Cloud-IDEs aus der jüngeren Vergangenheit.

Das Hardware-Setup beschränkt sich auf diese Auswahl.
Das Hardware-Setup beschränkt sich auf diese Auswahl.
(Bild: Lang / Microsoft)

Der Grund, warum Codespaces nicht gerade inflationär in den Medien vertreten ist, dürfte das liebe Geld sein: Codespaces selbst ist kostenpflichtig und derzeit auch nur für kostenpflichtige GitHub-Konten verfügbar. Neben den mindestens 40 Euro Jahresbeitrag für den Team-Account fallen nutzungsbasierte Kosten an. In der kleinsten Variante stehen 2 CPU-Kerne und 4 GB Arbeitsspeicher zur Verfügung, die mit 0,18 US-Dollar (USD) pro Stunde zu Buche schlagen. 32 Kerne und 64 GB RAM gibt es für stündlich 2,88 USD. Speicherplatz liegt bei 0,07 USD pro Gigabyte und Monat.

Codespaces wird möglicherweise auch für private GitHub-Repos irgendwann zur Verfügung stehen; wer ohnehin schon zahlender Kunde ist, sollte sich den Service auf jeden Fall mal anschauen. Folgend bekommen Sie schon mal ein paar erste praktische Eindrücke.

Codespaces-Tour

Codespaces lassen sich wie gesagt nur mit mindestens einem Team-Account nutzen. Zusätzlich muss das Repository, um das es geht, zu einer Ihrer Organisationen gehören – mit den privaten Repos des Erstellers einer Organisation funktioniert es nicht.

In der Kurzdoku von Codespaces wird erklärt, wie man einen neuen Codespace für ein Beispiel-Repo anlegt, leider wird ein wichtiger Schritt vorab ausgelassen: Zunächst muss die Verwendung von Codespaces in den Einstellungen der Organisation überhaupt erst freigegeben werden.

An gleicher Stelle lassen sich die Codespaces auch von der vorgegebenen Bindung an ein einzelnes Repository befreien. Der Zugriff darf alternativ für alle oder ausgewählte Repos erteilt werden. Bevor es mit der Arbeit losgeht, gilt es allerdings noch, ein Kostenlimit zu vergeben. Die monatlichen Ausgaben sind standardmäßig nämlich auf Null festgelegt, was wiederum den Zugriff auf Codespaces sperrt.

Codespaces lassen sich direkt über Repos einrichten
Codespaces lassen sich direkt über Repos einrichten
(Bild: Lang / Microsoft)

Das Erstellen von Codespaces ist grundsätzlich simpel: Über die Code-Schaltfläche eines Repos (mit den Links zum Klonen) gibt es nun einen neuen Reiter für Codespaces – ein Klick auf „New codespace“, Auswahl der Maschine (Kerne, RAM) und schon öffnet sich das Repo in VS-Code im Browser. Für einen schnellen Überblick zu System, Hardware und Speicher können Sie zum Beispiel „curl cli.help/version | sh“ nutzen, was ein paar Ausgaben von lsblk, lsb_release und lscpu hübsch formatiert ausgibt; beim Test-Codespace ein Debian 11 auf einem Intel Xeon.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Bei einigen Konkurrenten werden solche Arbeitsplätze standardmäßig über Vorlagen erstellt, also beispielsweise für Python-Projekte, die Abhängigkeiten und übliche Tools direkt mit installieren, ebenso Anbindungen an Code-Hoster wie GitHub oder Bitbucket. Bei Codespaces müssen Sie die eigentliche Einrichtung händisch vornehmen, was aber nur einmalig etwas mehr Arbeit verursachen dürfte.

VS-Code lässt sich wie immer über den internen Store erweitern und für reguläre Installationen steht natürlich auch eine Shell mit root-Zugriff zur Verfügung. Allerdings können Sie die Konfiguration auch über Dateien regeln. Am besten verwenden Sie zum Testen eines der Codespaces-Demo-Repos. Diese beinhalten bereits einen Ordner .devcontainer.json mit der gleichnamigen Container-Konfiguration sowie einem Dockerfile.

Wirklich bequem wird es mit einem Beta-Feature: Dotfiles. Damit lassen sich beliebige Konfigurationen ganz einfach über Dotfiles, also Dateien wie „.bashrc“, „.foobarconf“ usw. realisieren. Das Konzept ist durchdacht: Man kann einfach ein Repo explizit für diese Konfigurationsdateien erstellen.

Das Erstellen eines neuen Codespace klont dieses Repo in die neue Umgebung. Anschließend wird nach einer Liste von alternativen Dateinamen für Installationsskripte geschaut, etwa „install.sh“ oder „setup“. Gibt es keine derartigen Skripte mit manuellen Anweisungen, werden schlicht alle Dotfiles in das Home-Verzeichnis des Codespace kopiert. Und somit stehen dann im Container alle Vorgaben und Konfigurationen genau so zur Verfügung, wie sie es seit jeher auf lokalen Systemen tun.

Ein weiteres hübsches Feature ist derzeit noch „Private Preview“: das Prebuilding. Gemeint ist, dass Codespaces nicht erst bei ihrem Aufruf neu gebaut werden, sondern immer dann, wenn jemand in das zugehörige Repo pusht. Somit stehen aktualisierte Arbeitsplätze binnen kürzester Zeit bereit.

Bei Gitpod gibt es dieses Continous-Integration-Feature ebenfalls, so dass Gitpod tatsächlich nahelegt, Arbeitsplätze nicht nur Repo-, sondern sogar aufgabenspezifisch zu nutzen. Mal konkret: Ein kompletter Rebuild des (schlanken) Test-Codespace dauerte hier mit 70 Sekunden – also keine Ewigkeit. In der Praxis kann es aber natürlich zu längeren Ladezeiten kommen.

Insgesamt läuft Codespaces bislang reibungslos und wirft tatsächlich sofort die Frage auf, ob man nicht lieber jetzt als gleich auf ein Cloud-IDE umsteigen sollte – gleiches gilt natürlich auch für Konkurrenzprodukte. Zudem ist ein kompletter Verzicht ja gar nicht nötig, VS-Code Desktop ist immer nur eine Schaltfläche entfernt.

Der Recovery-Modus kann auch mit defekten Konfigurationen umgehen
Der Recovery-Modus kann auch mit defekten Konfigurationen umgehen
(Bild: Lang / Microsoft)

Erfreulicherweise hat sich Codespaces bei der Probefahrt auch noch recht robust gezeigt: Mit einem „Hallo Welt“ statt eines Dateiendes konnte die Konfiguratiosdatei „.devcontainer.json“ freilich nichts anfangen. Die Folge: Der Codespace wurde im Recovery-Modus gestartet, wo sich der Fehler auch nachlesen ließ. Der behobene Fehler wurde direkt bemerkt, ein Rebuild angeboten – 70 Sekunden später lief der Container wieder.

Kleinigkeiten wie das simple Schließen von Tabs machen den Umgebungen freilich auch nichts. Aber Vorsicht: So lange Codespaces aktiv sind, läuft auch der Stundenzähler.

(ID:47996959)