Continuous Integration mit Jenkins

© © Florin Rosu, Fotolia

Dienstbarer Geist

Den neu geschriebenen Programmcode zu übersetzen und zu testen, ist eine Sache. Das Ganze dann aber auch noch in ein RPM-Paket zu gießen, um die Software sauber auf den Test-Systemen zu installieren, eine ganz andere. Jenkins hilft, diese Arbeit zu minimieren.
Security ist ein stets aktuelles Thema in der IT. Deshalb widmet sich das ADMIN-Magazin 04/2012 speziell Sicherheitsaspekten und gibt Antworten auf die Fragen: ... (mehr)

Ob Entwickler ihre Arbeit oft und frühzeitig in ein Versionskontrollsystem (VCS) wie beispielsweise Subversion oder Git einchecken sollen oder nicht, ist Gegenstand hitziger Diskussionen. Die Gegner führen an, dass hierdurch möglicherweise die Arbeit anderer Entwickler erschwert wird, da ja nicht immer sichergestellt ist, dass der eingecheckte Code auch funktioniert beziehungsweise die Software sich überhaupt noch übersetzen lässt. Die Befürworter halten entgegen, dass sich neuer Code immer schwieriger integrieren lässt, je größer und umfangreicher der neue Commit wird. Kleine, aber zahlreiche Code-Häppchen sollen hier also sicherstellen, dass ein möglicher Fehler früh erkannt wird und dieser sich somit schnell beheben lässt.

Das Ganze kann aber natürlich nur dann funktionieren, wenn jemand die vielen neuen Code-Häppchen auch regelmäßig testet, sobald diese im Software-Repository auftauchen. Nur dann ist sichergestellt, dass Fehler zeitnah und somit auch einfach zu beheben sind. Wieso also nicht einfach jemanden einstellen, der den lieben langen Tag nichts anderes macht, als neu eingecheckten Code zu übersetzen, zu verifizieren und dann auf mögliche Fehler hinzuweisen? Diese neue Ressource würde noch nicht einmal einen Gehaltsscheck verlangen, denn die Rede ist von Jenkins, dem Butler – einigen vielleicht auch noch unter dem Namen Hudson bekannt.

Jenkins, geb. Hudson

Jenkins [1] ist eine webbasierte Java-Anwendung, die in jedem modernen Servlet-Container läuft, wie beispielsweise Tomcat oder Jboss. Das Tool bringt jedoch auch mit Winstone einen eigenen, minimalen Container mit. Somit besteht nicht zwingend die Notwendigkeit, einen zusätzlichen Webcontainer zu installieren, sollte dieser nicht bereits vorhanden sein. Jenkins unterstützt eine ganze Reihe von Buildtools und integriert sich nahtlos in Versionskontrollsysteme wie beispielsweise Subversion. Dank der modularen Struktur von Jenkins lässt sich dessen Funktionsumfang sehr stark erweitern. So existieren beispielsweise Plugins für das Einbinden von weiteren Buildtools oder Versionskontrollsystemen.

Durch regelmäßige Abfragen des konfigurierten VCS kann Jenkins sehr schnell feststellen, ob neuer Code in das Repository eingecheckt wurde. Sollte dies der Fall sein, so wird dieser ausgecheckt, und Jenkins ruft das konfigurierte Build-Tool auf, um den neuen Code schließlich zu übersetzen. Zusätzlich ist Jenkins natürlich auch in der Lage, beliebige andere Aktionen auf den neuen Code anzuwenden. Hierzu zählt beispielsweise das Bauen von einem neuen RPM-Paket auf Basis des neuen Programmcodes.

Grüße von Chuck Norris

Wer das Chuck-Norris-Plugin installiert hat, der bekommt im Erfolgsfall das passende Thumbsup zu sehen ( Abbildung 1 ), sonst gibt Jenkins eine einfache Erfolgsmeldung aus. Die Build-Ergebnisse, auch Artefakte genannt, bewahrt Jenkins dabei auf Wunsch auf. Das ist ganz nützlich, wenn man diese nicht durch den nächsten Buildprozess wieder überschreiben möchte. Der Aufruf eines automatischen Testtools, wie beispielsweise JUnit, stellt dann schließlich sicher, dass der neue Build auch funktionell die gewünschten Ergebnisse liefert. Mögliche Fehler zeigt Jenkins auch direkt an und kann auf Wunsch auch per E-Mail oder einen RSS-Feed darüber informieren.

Abbildung 1: Der Build war erfolgreich? Chuck Norris bedankt sich mit einem Thumbsup.
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023