Betrachten wir eingehend zwei weitverbreitete Continuous Integration-Tools und ihre jeweiligen Eigenheiten.
Die Vorgehensweisen im Softwareentwicklungszyklus haben sich in den vergangenen zehn Jahren beträchtlich gewandelt.
Ehemals dominierte das Wasserfallmodell, dann hielt die agile Methodik Einzug, welche auf iterativer Entwicklung basierte. Heutzutage, mit dem DevOps-Ansatz, werden sowohl Entwicklung als auch Betrieb iterativ und kontinuierlich vorangetrieben, bis die gesamte Anwendung fertiggestellt und bereit für den Einsatz ist.
Der Begriff CI/CD, der für Continuous Integration und Continuous Delivery steht, erfreut sich großer Beliebtheit. Er beschreibt eine DevOps-Praxis, die darauf abzielt, die Entwicklung und Bereitstellung von Anwendungen beschleunigt und verlässlicher zu gestalten. Es ist eine Methode, die sämtliche Phasen, von der Anforderung bis zur Produktionsbereitstellung, mithilfe eines CI/CD-Tools automatisiert. Diese Herangehensweise ist weitaus effizienter und sicherer als manuelle Prozesse.
Auf dem Markt sind mittlerweile zahlreiche CI/CD-Werkzeuge verfügbar, was die Auswahl der geeigneten Tools zu einer Herausforderung machen kann.
Jenkins: Eine detaillierte Betrachtung
Jenkins, ein Open-Source-Tool, hat sich als eine der meistgenutzten Lösungen für kontinuierliche Integration etabliert. Es gilt als De-facto-Standard in diesem Bereich.
Jenkins, geschrieben in Java, kann auf diversen Betriebssystemen wie Windows oder Linux installiert werden. Ursprünglich als Build-Automatisierungswerkzeug für Java-Anwendungen konzipiert, hat es sich stetig weiterentwickelt und bietet nun über 1400 Plugins zur einfachen Integration mit anderen Plattformen und Tools.
Jenkins ist ein zentrales Werkzeug im Bereich der kontinuierlichen Integration und Auslieferung (Continuous Delivery). Es ist einfach zu installieren und bietet ein Dashboard für das Projektmanagement, das bequem über einen Browser erreichbar ist.
Entwickler nutzen Jenkins, um ihren Code automatisch zu bauen, zu integrieren, zu testen und bereitzustellen. Nach dem Einchecken des Codes durch die Entwickler übernimmt Jenkins den geänderten Quellcode, initiiert einen Build und führt bei Bedarf Tests durch. Das Ergebnis wird im Jenkins-Dashboard angezeigt und kann bei Bedarf eine Benachrichtigung an den Entwickler senden.
TeamCity: Eine Analyse
TeamCity, ein kommerzieller CI/CD-Server, basiert ebenfalls auf Java und wurde von JetBrains entwickelt.
TeamCity wirbt mit dem Slogan „Leistungsstarke Continuous Integration out of the box“ und wird diesem Anspruch gerecht. Es bietet nahezu alle Funktionen von Jenkins, ergänzt durch einige zusätzliche Features. TeamCity lässt sich in Docker integrieren, um Container automatisch über docker-compose zu erstellen. Es bietet zudem Integrationsunterstützung für das Jira-Tool zur einfachen Problemverfolgung.
TeamCity unterstützt das .NET-Framework und kann problemlos in verschiedene IDEs wie Eclipse oder Visual Studio integriert werden. Durch die Integration zur Erstellung eines Artefakt-Repositorys kann TeamCity Artefakte im Dateisystem des TeamCity-Servers oder in einem externen Speicher ablegen.
Die kostenlose Version von TeamCity (Professional Server Lizenz) ermöglicht bis zu 100 Builds und 3 Build-Agenten ohne zusätzliche Kosten.
Jenkins versus TeamCity: Ein Vergleich
Open-Source versus Kommerziell
Der wesentlichste Unterschied liegt in der Natur der beiden Tools: Jenkins ist ein Open-Source-Tool für kontinuierliche Integration, während TeamCity eine kommerzielle Lösung darstellt. Jenkins wird unter der MIT-Lizenz veröffentlicht und von einer weltweiten Entwicklergemeinschaft unterstützt. TeamCity wird von JetBrains entwickelt und gewartet.
Benutzeroberfläche
TeamCity zeichnet sich durch eine ansprechende Benutzeroberfläche aus, die insbesondere Einsteiger im Bereich der kontinuierlichen Integration anspricht. Diese Oberfläche ermöglicht es, Builds zu taggen, zu kommentieren und anzupinnen, was die Organisation erleichtert.
Die Benutzeroberfläche von Jenkins wirkt eher traditionell und bietet aus Sicht der Benutzerfreundlichkeit noch erhebliches Verbesserungspotenzial.
Exklusive Funktionen
Obwohl Jenkins nicht über eine Fülle integrierter Funktionen verfügt, bietet das umfangreiche Plugin-Ökosystem zahlreiche Funktionalitäten, die bei anderen CI-Tools nicht zu finden sind. Diese Plugins ermöglichen beispielsweise die Erstellung von Builds und die Codeanalyse zur Verbesserung der Codequalität.
TeamCity hingegen verfügt über diverse „Out-of-the-Box“-Funktionen, die über die Standardfunktionen von CI-Tools hinausgehen. Es unterstützt mehrere Plattformen wie Java, Ruby, .NET usw. Die Erstellung von Docker-Images ist ebenfalls möglich. Mit der Unterstützung von Bugzilla und Jira kann die Problemverfolgung vereinfacht werden. Zudem werden Build-Änderungen und der Fehlerverlauf gespeichert, was die Analyse vergangener Statistiken und die Durchführung früherer Builds erleichtert.
Installation
Für die Installation von Jenkins muss Java auf dem System installiert sein. Die Einrichtung gestaltet sich unkompliziert, wenn Java bereits vorhanden ist. Nach der Installation kann die Arbeit über die Weboberfläche von Jenkins aufgenommen werden.
Die Installation von TeamCity ist ebenfalls recht einfach. Nach dem Download des TeamCity-Servers müssen die Anweisungen in der Dokumentation befolgt werden.
Integrationen
Im Bereich der Integrationsmöglichkeiten übertrifft Jenkins die Konkurrenz bei weitem. Die Popularität von Jenkins auf dem Markt beruht maßgeblich auf der Verfügbarkeit von Hunderten kostenloser Plugins.
TeamCity bietet im Vergleich zu Jenkins zwar weniger Plugin-Integrationen, jedoch einige exklusive, die zu den „Out-of-the-Box“-Funktionen beitragen. Es unterstützt das .NET-Framework und die Integration mit Visual Studio Team Services, was eine Cloud-Integration mit Anbietern wie AWS, Azure, GCP und VMware ermöglicht.
Sicherheit
Der kommerzielle Charakter von TeamCity gewährleistet durch die Unterstützung von JetBrains eine hohe Priorität auf Sicherheitsaspekte. TeamCity bietet die Integration mit dem Snyk-Sicherheits-Plugin, das Schwachstellen-Scans in der Build-Pipeline ermöglicht. Dies hilft, potenzielle Risiken und Bedrohungen zu identifizieren und zu beheben.
Da Jenkins Open Source ist, können sich Risikominderungsmaßnahmen verzögern, da alles von der Entwicklergemeinschaft abhängt.
Community
Die Jenkins-Community ist umfangreicher als die von TeamCity. Da Jenkins Open Source ist, kann jeder Entwickler zu diesem Projekt beitragen. Täglich wirken Entwickler an der Weiterentwicklung mit, um neue Funktionen hinzuzufügen und das Tool zu verbessern.
TeamCity hingegen wird von JetBrains gepflegt und hat eine professionelle Support-Community zur Weiterentwicklung.
Preisgestaltung
Jenkins ist kostenlos nutzbar, was es für viele Unternehmen zur bevorzugten Wahl macht. Unternehmen sparen durch die Verwendung eines kostenlosen CI-Tools wie Jenkins erhebliche Kosten.
TeamCity ist nicht kostenlos und bietet zwei Lizenzmodelle: Professional Server und Enterprise Server. Die Professional Server-Lizenz ermöglicht die kostenlose Nutzung von 100 Build-Konfigurationen und 3 Build-Agenten. Für zusätzliche Builds und Agenten fallen Kosten an (299 $ für 1 zusätzlichen Build-Agenten und 10 Build-Konfigurationen). Die Enterprise Server-Lizenz startet bei 1999 $ mit 3 Agenten und unbegrenzten Build-Konfigurationen.
Vergleichstabelle
Jenkins | TeamCity | |
Entwicklungssprache | Java | Java |
Entwickler | CloudBees, Kohsuke Kawaguchi, Open Source | JetBrains |
Lizenz | MIT-Lizenz | Proprietäre Software |
Merkmale |
|
|
Benutzerfreundlichkeit | Ja | Ja |
Benutzeroberfläche | Einfache Oberfläche | Ansprechende Oberfläche |
Community | Größere Community aufgrund Open Source | Kleinere Community im Vergleich zu Jenkins |
Preisgestaltung | Kostenlos | Professional Server: 299 $ pro Agent nach 3 kostenlosen Agenten. Enterprise Server ab 1999 $ |
Integrationen | Über 1400 Integrationen | Über 300 Integrationen |
Sicherheit | Weniger sicher | Sicherer |
API | JSON, Python, RESTful-API: XML | RESTful-API, Open API für Plugins |
Programmiersprachen | Java, PHP, C, C++, Fortran, Python und viele mehr | Python, C++, Java, .NET, Ruby, PHP, Node.js und mehr |
Container-Unterstützung | Docker-Plugin | Integriert, Docker Support out of the box |
Release-Zyklus | Häufiger | Weniger häufig |
Berichterstattung | Detaillierte Berichte | Berichte mit besserer Web-Oberfläche |
Fazit
Dieser Vergleich hat die Unterschiede zwischen Jenkins und TeamCity, zwei der meistgenutzten Continuous Integration-Tools, aufgezeigt.
Bei der Auswahl eines CI-Tools sollten Faktoren wie Hosting-Optionen, verfügbare Integrationen, wiederverwendbare Codebibliotheken, Container-Unterstützung sowie die Benutzerfreundlichkeit und Lernkurve berücksichtigt werden. Ein Tool, das diese Kriterien erfüllt, ist eine ausgezeichnete Wahl.
Im Zweifelsfall empfiehlt es sich, die kostenlosen Versionen von Jenkins und TeamCity zu testen. Nach einigen Builds auf beiden Plattformen wird es einfacher sein zu beurteilen, welches Tool für die eigenen Projekte besser geeignet ist.