Vollständige containerisierte Builds für Continuous Integration

Jean Revertera

Docker hat sich auf Continuous Integration Servern erfolgreich durchgesetzt. Unzählige Projekte nutzen bereits Container, um von reproduzierbaren und wegwerfbaren Build-Umgebungen zu profitieren. 

Die Nutzung von Docker geht von der Bereitstellung von Infrastrukturen für die Durchführung von Integrationstests bis hin zu vollständig containerisierten Pipelines, in denen die Zusammenstellung und Verpackung von Artefakten selbst innerhalb von Containern durchgeführt wird.

Der letztere Anwendungsfall, die Handhabung von containerisierten Build-Agenten, ist konzeptionell sehr interessant. Obwohl die Integration mit bestehenden Build-Prozessen, ohne die richtigen Werkzeuge, auch aufwendig sein kann. Im Rahmen eines Open Source Puzzle Piece Project (FOSPPP) wurde ein Plugin entwickelt, um den TeamCity Continuous Integration Server zu erweitern: Mit der Möglichkeit, Build Agents die in Docker Containers gehosted sind, auf Anfrage zu erstellen und zu löschen.

Sobald ein neuer Build-Job eingerichtet ist, startet das Plugin einen neuen Container, der eine kompatible Agent-Instanz hostet, die sich selbst registriert (und vielleicht auf die letzte Agent-Version aktualisiert wird, wie jeder eigenständige Agent). In der Plugin-Konfiguration können mehrere Agentenprofile spezifiziert werden. Dies jeweils mit bestimmten Container-Einstellungen und einem definierten Lebenszyklus, je nachdem, ob der Container am Ende jedes Builds entsorgt wird, oder wiederverwendet werden kann.
Das Plugin stellt auch einen Container-Editor zur Verfügung, in dem die meisten Container-Merkmale, die von der Docker-API unterstützt werden, grafisch eingestellt werden können.

Für die weitere Bequemlichkeit ist es auch möglich, einen konfigurierten Container direkt im Konfiguration GUI zu testen. Von der Container-Erstellung bis hin zur effektiven Verbindung des Agenten mit dem Builder-Server. Eine „Live-Logs“ -Funktion ist ebenfalls enthalten, welche die Container-Logs durch Web-Sockets an den Browser in Echtzeit weiterleitet.

Dieses Plugin hat den TeamCity 2016 Plugin Contest gewonnen! Es steht unter der Apache Lizenz auf GitHub zur Verfügung.

Kommentare sind geschlossen.