Unser CI-Server baut jetzt eine lauffähige PhoneGap-App. Was dafür zu tun ist, haben wir im Artikel PhoneGap-Entwicklung mit dem Jenkins-CI-Server gezeigt. In diesem Blog wurde bereits die Frage behandelt, wie wichtig professionelles Build-Management ist und welche Vorteile man dadurch erzielt.
Wir wollen nun zeigen, wie man Build-Management auch für PhoneGap-Projekte betreiben kann. Dazu integrieren wir unseren Jenkins CI-Server mit dem Artefakt-Versionierungssystem Artifactory und mit dem Software-Qualitätsmanagement-Werzeug Sonar.
Jenkins lässt sich von Haus aus sehr einfach mit Sonar und Artifactory integrieren. Es verfügt über eine große Anzahl unterschiedlichster Plugins, mit der sich seine Funktionalität fast beliebig erweitern lässt.
Wir setzen voraus, dass sowohl Sonar als auch Artifactory bereits verfügbar sind. Entsprechende Installationsanleitungen findet man auf den Homepages dieser Projekte.
Artifactory
Dieser Punkt ist sehr einfach umzusetzen. Man installiert das Artifactory-Plugin und speichert in den Jenkins-Systemeinstellungen die Artifactory-URL sowie Benutzername und Passwort.
Weitere Einstellungen sind projektspezifisch und werden in den einzelnen Builds individuell vorgenommen.
Andere Artefakt-Versionierungssysteme wie Archiva oder Nexus könnten an dieser Stelle ebenso eingebunden werden. Nach meiner Erfahrung lassen sich diese beiden Alternativen jedoch bei weitem nicht so einfach mit Jenkins integrieren, wie es mit Artifactory möglich ist.
Analyse der Code-Qualität mit Sonar
Über den Nutzen der Analyse der Code-Qualität haben wir schon mehrfach geschrieben. Deswegen ist dies auch bei der App-Entwicklung ein Thema.
Es gibt FindBugs, PMD, CheckStyle und verschiedene Linter, mit denen man statische Code-Analysen erstellen kann. Mittels dieser lässt sich die Qualität gezielt verbessern.
PhoneGap-Apps werden primär in JavaScript implementiert, und das in diesem Blog schon mehrfach vorgestellte Werkzeug Sonar hilft uns auch in diesem Anwendungsfall weiter.
Wir installieren zunächst das Sonar-Plugin für Jenkins und konfigurieren dann alle notwendigen Werte in den Jenkins-Systemeinstellungen. Es reicht normalerweise, dem Plugin mitzuteilen, wie es sich mit der Sonar-Datenbank verbinden kann.
Alle weiteren Einstellungen sind auch hier projektspezifisch und werden in den einzelnen Builds individuell vorgenommen.
In Sonar selbst installieren wir zum Schluss noch das dafür verfügbare JavaScript-Plugin. Dieses analysiert den Code anhand der Regeln aus dem JSLint-Projekt.
Build in Jenkins konfigurieren
Ist das Plugin aktiviert, so wird der Export der Maven-Artefakte nach Artifactory in den Build-Einstellungen mit zwei Mausklicks ermöglicht. Die Option Deploy maven artifacts muss aktiviert sein. Wahlweise kann auch noch Capture and publish build info aktiviert werden.
Es ist sinnvoll, sich Gedanken darüber zu machen, wie oft die Artefakte ins Artifactory importiert werden sollen.
Bei jedem Jenkins-Lauf immer auch einen Artifactory-Import durchzuführen, ist eventuell nicht immer praktikabel.
Einen separaten Artifactory-Job einzurichten, der entweder nur stündlich oder sogar nur einmal pro Tag läuft, wird in den meisten Fällen die bessere Lösung sein.
Die Integration in Sonar erfolgt ebenfalls als Post-Build-Aktion. Nachdem diese Option aktiviert wurde, trägt man im Feld Language noch den Wert js ein.
Damit teilen wir Sonar mit, dass es zu diesem Build eine Analyse der Programmiersprache JavaScript durchführen soll.
Ergebnis
Wir können jetzt PhoneGap-Apps mit Maven auf einem Build-Server mit Jenkins bauen. Das Ergebnis, die Maven-Artefakte, können über Artifactory publiziert werden. Die Code-Qualität unserer JavaScript-Implementierung analysieren wir mit Sonar.
Wir setzen also genau diejenigen Werkzeuge ein, die bei professioneller Enterprise-Java-Softwareentwicklung unerlässlich sind. Nur so lässt sich auch bei der App-Entwicklung dasselbe Maß an hochwertiger Arbeit abliefern.