Das OpenSource Werkzeug Jenkins ist eines der Tools, welches wir im Umgang mit Webprojekten primär einsetzen, wenn wir einen Continuous Integration Server benötigen, der sich im professionellen Projektumfeld bewährt hat.
In diesem Artikel erfahrt ihr was Jenkins ist, wofür man es verwendet und welche Best Practices was bringen.
Was ist Jenkins?
Bei Jenkins handelt es sich um ein webbasiertes System zur kontinuierlichen Integration (Continuous Integration (CI)). Die Software wurde ursprünglich unter dem Namen Hudson entwickelt und bekannt, aber aufgrund von Namensrechtunstimmigkeiten kam es zu einer Umbenennung in Jenkins. (Hintergrund: Das US-amerikanische Soft- und Hardwareunternehmen “Oracle” für welches der Jenkins-Entwickler Kohsuke Kawaguchi tätig war hält die Namensrechte für “Hudson”).
Mit Hilfe von Jenkins wird die automatisierte Ausführung von sich wiederholenden Aufgaben (z.B. Cronjobs, oder der Build eines Softwareprojekts) überwacht (mehr dazu in unserer Übersicht zur Deployment Pipeline, die sich mit Jenkins aufbauen lässt). Da in vielen Projekten in denen wir tätig sind eine hohe Qualität gewährleistet sein muss, sind tägliche Software-Builds oft an der Tagesordnung. Ideale Einsatzbedinungen für Jenkins, dessen Fokus in folgenden Bereichen liegt:
- Jenkins überwacht die Ausführung extern gestarteter Jobs wie beispielsweise Cron-Jobs (das sind Vorgänge, die automatisch zu einer bestimmten Zeit erledigt werden sollen), Procmail-Jobs und sogar Jobs auf Remote Machines.
- Dann wird Jenkins für den kontinuierlichen Build / für kontinuierliche Tests von Software (-Projekten) eingesetzt (wie CruiseControl oder DamageControl). Mit Hilfe der automatisierten Builds wird die Produktivität in jedem Team gewaltig gesteigert, denn die Entwickler tun sich leichter ihre Änderungen am Projekt zu integrieren und deren Funktionalität zu testen. Läuft was nicht so, wie es soll erhält man in der Regel unmittelbares Feedback und kann sich auf Spurensuche machen und mögliche Bugs schneller zu fixen. Das Tool unterstützt verschiedene Build-Tools (z.B. Maven, Apache Ant, Versionsverwaltungssysteme wie Git, CVS oder Subversion, automatische Testverfahren wie JUnit etc.).
Jenkins liefert eine übersichtliche Weboberfläche über welche Entwickler, Administratoren oder Projektmanager automatisierte Statusanzeigen zu ihren Projekten ausgegeben bekommen. Zudem sind eine Vielzahl an PHP Templates verfügbar.
Selbst ohne technisches Verständnis sieht man bei der Jenkins-Oberfläche anhand der farblichen Darstellung des Status-Reports oder der “Wetterverhältnisse” sehr leicht wenn etwas nicht passt.
Jenkins Job Template für Drupal Projekte
Es gibt beispielsweise für Projekte auf Basis von Drupal ein Jenkins Job Template welches zusammen mit den folgenden Jenkins-Plugins gute Dienste leistet:
- Analysis Collector (zur Verarbeitung verschiedener Logfiles)
- Checkstyle (zur Verarbeitung des Drupal Coder Moduls oder PHP_Codesniffer Logfiles im Checkstyle Format)
- DRY (zur Verarbeitung von phpcpd Logfiles in PMD-CPD Format)
- Phing (um Phing build Dateien zum Laufen zu bringen)
- Plot (zur Verarbeitung von phploc CSV Outputs)
- PMD (zur Verarbeitung von PHPMD Logfiles im PMD Format)
- Static Code Analysis (zur Verarbeitung verschiedener Logfiles)
Wichtige Jenkins Features
Als Continuous Integration Server liefert Jenkins folgende wichtige Features:
- Relativ einfache Installation und Konfiguration (mehr dazu in unserem Artikel Jenkins mit Tomcat über nginx)
- Change set Support
- Permanent Links
- Real-time RSS / E-Mail Benachrichtigungen
- JUnit / TestNG Test Reports
- Distributed (verteilte) Builds
- File Fingerprints
- Support zahlreicher Plugins für Drittanbieter-Tools
3 Best Practices zu Jenkins
Jenkins ist unserer Meinung nach die ideale Basis zum Einsatz als Continuous Integration Server. Wer sich für die Software entscheidet macht einen wichtigen Schritt in die richtige Richtung. Dennoch sollte nicht vergessen werden, dass es mit der Installation und Konfiguration allein nicht getan ist. Der schwere Teil ist die richtige CI Integration / Betriebsführung, die im Anschluss an die Installation und Konfiguration erfolgt. Deswegen hier ein paar Best Practices zur erfolgreicheren Jenkins-Anwendung von uns.
Tipp 1: Sicherheit hat oberste Priorität
Damit nicht jeder x-beliebige Anwender auf die frisch installierte Jenkins-Instanz zugreifen kann und Jenkins konfiguriert, Jobs erstellt / editiert / löscht oder Builds durchführt etc. ist es notwendig als Erstes immer die Zugriffsrechte entsprechend einzustellen.
Tipp 2: Versionsverwaltung für saubere Builds verwenden
Auch wenn der Einsatz eines Versionsverwaltungssystems (z.B. Git) mit Jenkins nicht zwingend ist, empfehlen wir ihn trotzdem. Denn der Source Code, welcher für saubere Builds verwendet wird, sollte immer von einem Versionsverwaltungssystem kommen. Nur so lässt sich ein durchgeführter Build reproduzieren. In der Praxis hat es sich bewährt, dass der komplette Code (auch Build-Skripte, Release-Notes etc.) in VCS (Version Control System) eingecheckt werden.
Tipp 3: Zusammenarbeit mit Ticketsystem gewährleisten
Wenn möglich, sollte man dafür Sorge tragen, dass das verwendete Ticketsystem (z.B. Redmine oder Jira) mit Jenkins zusammen arbeitet um durchgeführte Anpassungen zentraler zu protokollieren. Für Redmine beispielsweise gibt es Plugins, die Redmine in Jenkins integrieren und umgekehrt genauso.
Fazit
Jenkins ist ein beliebtes OpenSource Tool für Continuous Integration. Es liefert von Haus aus eine Fülle an Einstellungsoptionen was sowohl die Servereinrichtung als auch Projektkonfiguration betrifft. Viele Funktionen und Parameter sind einfach zu verstehen, überfordern manche Systemadministratoren jedoch zu Beginn. Davon nicht abschrecken lassen!
Nicht vergessen:
- Sicherheit hat immer Priorität
- Versionsverwaltungssysteme ein MUSS
- Zusammenarbeit mit Ticketsystemen wäre schön
Gerne unterstützen wir euch dabei das Bestmögliche aus eurer Jenkinsinstallation heraus zu holen, da wir aufgrund unserer langjährigen Projektarbeit die nötige Erfahrung mitbringen. Jetzt eine Anfrage stellen.