Continuous Integration mit TeamCity und Docker

Mit TeamCity können Sie Ihre CI/CD-Pipeline für Projekte jeder Größe und Komplexität automatisieren und dabei für jeden Schritt Docker verwenden.

Build-Umgebung in Docker

Mussten Sie schon einmal frustriert feststellen, dass der Code, der auf Ihrem lokalen System fehlerfrei lief, in anderen Umgebungen nicht funktioniert? Mit TeamCity können Sie Builds und Tests in Docker ausführen und so sicherstellen, dass Ihre Anwendung nicht an Ihr spezifisches System gebunden ist und auch anderswo korrekt funktioniert – von Ihren QA-Systemen bis hin zu Produktionsinstanzen in der Cloud.

Skalierbare Erstellung und Verwaltung von Docker-Images

Sie wollen eine skalierbare und wartungsfreundliche CI/CD-Infrastruktur aufbauen? Mit TeamCity können Sie Docker-Befehle um buildspezifische Parameter ergänzen, zentralisierte Pipelines mithilfe von Vorlagen einrichten und die Bereinigung von veralteten Docker-Images auf Build-Agents und in Docker-Registries automatisieren.

Integrationstests für containerisierte Dienste

Sie müssen die Zusammenarbeit unterschiedlicher App-Komponenten testen oder Ihre App in einer bestimmten Testumgebung ausführen? TeamCity kann Docker-Container starten, Integrationstests durchführen und die Container nach Abschluss zuverlässig und reproduzierbar herunterfahren.

Integration von Docker in CI/CD-Pipelines

TeamCity unterstützt und beschleunigt alle Workflows in der Softwareentwicklung, bei denen Docker zum Einsatz kommt. Während andere CI/CD-Tools nur binäre Build-Ergebnisse bereitstellen (d. h. OK/Fehler), ist TeamCity tief in Docker integriert und bietet Ihnen umfassende Informationen über Ihre Pipelines:

  • Build-Protokolle und Testergebnisse in Echtzeit
  • Statistiken, Trends und Codequalitätsprüfungen
  • Stack-Traces von Prozessen und Threads
  • Änderungen, die zu Build-Fehlern führen

So können Sie mühelos Probleme in Ihren Builds finden, den Korrekturbedarf erkennen und neue Funktionen schneller und in höherer Qualität bereitstellen.

TeamCity-Grundfunktionen für die Docker-Integration

Build-Runner für Docker

Mit dem Docker-Build-Runner können Sie Build-Schritte hinzufügen, die Docker-Befehle ausführen. Dies ist besonders nützlich, wenn Sie dynamisch angepasste Docker-Argumente benötigen. So könnten Sie etwa vorgeben, dass Builds auf einer bestimmten Betriebssystem-Version ausgeführt werden sollen, die an einem früheren Punkt der Pipeline definiert wurde. Außerdem kann TeamCity den lokalen Docker-Image-Cache auf Build-Agents automatisch bereinigen und auf diese Weise sicherstellen, dass die Agents für nachfolgende Builds bereit sind.

Weitere Details finden Sie im Abschnitt Docker Runner der Dokumentation.

Docker-Wrapper

Mit dem Docker-Wrapper können Sie einen TeamCity-Buildschritt in einem Docker-Container isoliert vom Host-Betriebssystem ausführen und dadurch konsistente und reproduzierbare Ergebnisse erzielen. TeamCity verfolgt alle Ereignisse während des Buildvorgangs und stellt Ihnen Echtzeitberichte, Testanalysen und weitere intelligente Funktionen wie Stack-Traces aus dem Docker-Container bereit.

Weitere Details finden Sie im Abschnitt Docker Wrapper der Dokumentation.

Build-Runner für Docker Compose

Der Build-Runner für Docker Compose wird verwendet, um Docker-Container zu Beginn eines Buildvorgangs zu starten und sicherzustellen, dass TeamCity diese nach Abschluss oder Anhalten des Builds herunterfährt. Er wird hauptsächlich bei Integrationstests eingesetzt, bei denen die Komponenten containerisiert sind und die Durchführung durch Docker-Compose-Dateien definiert werden kann. TeamCity selbst wird zum Beispiel mit mehreren Versionen unterschiedlicher Backend-Datenbanken getestet, und die entsprechenden Integrationstests werden mit dem Build-Runner für Docker Compose durchgeführt.

Weitere Details finden Sie im Abschnitt Docker Compose Runner der Dokumentation.

Docker-Unterstützung für Builds

Das Build-Feature „Docker-Unterstützung“ ermöglicht die Zugriffsverwaltung für Docker-Registries. Die Konfiguration erfolgt auf der Projektebene, und es werden alle gängigen Dienste unterstützt, einschließlich Docker Hub, Amazon ECR, JFrog Container Registry und andere, sodass die verschiedenen TeamCity-Funktionen diese nutzen können. Die Serverbereinigung, bei der Daten eines veralteten Builds gelöscht werden, kann zum Beispiel so konfiguriert werden, dass sie Docker-Images entfernt, die als Teil dieses Builds veröffentlicht wurden.

Weitere Details finden Sie im Abschnitt Docker Support der Dokumentation.

Anwendungsfall: So beschleunigen Docker und Continuous Integration die Entwicklungsabläufe

Nehmen wir an, Sie haben einen Backend-Service implementiert, der auf Ihrem eigenen System kompiliert und ausgeführt wird. Auch wenn ein Einsatz außerhalb Ihrer lokalen Umgebung nicht geplant ist, gibt es dennoch viele Dinge, die sich mit der Zeit ändern können: das Betriebssystem, Build-Tools, Fremdbibliotheken und mehr. Eine vollständig statische Umgebung ist auf einem lokalen System in der Praxis nicht aufrechtzuerhalten – früher oder später wird ein Problem auftreten.

Mit Docker und TeamCity können Sie Ihre Builds vollständig reproduzierbar gestalten und sich dadurch die umständliche Verwaltung von Abhängigkeiten und die Behebung von Kompatibilitätsfehlern ersparen. Eine CI/CD-Pipeline für ein Java-Projekt mit Maven könnte zum Beispiel so aussehen:

TeamCity bietet Ihnen Echtzeitberichte zu Ihren Builds und Tests vom Moment des VCS-Commits an bis zum Vorliegen der Ergebnisse und gewährleistet dadurch eine schnellstmögliche Feedback-Schleife. Es unterstützt Projekte jeder Komplexität und Größe und hilft Ihrem Team, die Bug-Häufigkeit zu minimieren, Features schneller auszuliefern und den Entwicklungsprozess transparenter zu gestalten.

Mithilfe einer unkomplizierten Weboberfläche können Sie CI/CD-Pipelines einrichten, ohne auch nur eine Zeile Code zu schreiben. Sie können die Konfiguration jedoch auch als Kotlin-Code definieren und so ein wartbares, reproduzierbares CI-System einrichten, das mehrere Programmiersprachen, Betriebssysteme und Cloudplattformen umfassen kann.

FAQ: CI/CD mit Docker und TeamCity

Welche Betriebssysteme werden von der TeamCity- und Docker-Integration unterstützt?

TeamCity kann Docker auf jeder Plattform verwenden, die eine Docker-Laufzeitumgebung unterstützt, einschließlich Linux, Windows und macOS.

Kann TeamCity Docker-Images erstellen?

Ja, TeamCity kann nicht nur Builds in Docker-Containern ausführen, sondern auch Docker-Images erstellen, sie an Docker-Registries übertragen und anhand verschiedener Kriterien löschen.

Ist TeamCity kostenlos?

Ja, TeamCity On-Premises ist für kleine Projekte kostenlos und hat keine Einschränkungen hinsichtlich der Benutzeranzahl oder der Buildzeiten. TeamCity Cloud bietet eine kostenlose 14-tägige Testphase. Beide Versionen bieten eine vollständige Docker-Unterstützung.

Kann TeamCity Builds in einem Docker-Container erstellen?

Mit TeamCity haben Sie die Wahl, ob Sie Builds direkt auf Ihrem System oder in Docker-Containern ausführen möchten.