Ich arbeite an einem Team, das einen RESTful-HTTP-Service erstellt. Wir haben Probleme beim Einrichten eines Jenkins-CI-Jobs, der den Dienst erstellt, im Hintergrund ausführt, einige Tests ausführt und dann die Server beendet.
Wir haben etwas, das gerade jetzt funktioniert, aber es ist unzuverlässig. Wir verwenden 3 Build-Schritte:
Der erste Build-Schritt ist ein Execute Shell
-Schritt mit den folgenden Befehlen:
Zweitens machen wir einen Invoke Maven 3
-Schritt, der auf den Test pom.xml
zeigt.
Und drittens führen wir Invoke Standalone Sonar Analysis
aus, um statische Code-Analysen durchzuführen.
Das funktioniert meistens, aber wir sind auf Jenkins ProcessTreeKiller angewiesen, um die Dienste nach Abschluss des Jobs zu stoppen . Wir erhalten immer die Warnungen: Process leaked file descriptors. See
http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+buildfor
more information
Leider gab es Fälle, in denen der Dienst zu früh beendet wurde (bevor die Tests abgeschlossen wurden) oder der Dienst überhaupt nicht beendet wurde (wodurch nachfolgende Builds fehlschlagen, weil der Port bereits verwendet wird).
Also brauchen wir etwas zuverlässiger.
Wir haben versucht, ein einzelnes Shell-Skript zu erstellen, das das Starten des Dienstes, das Ausführen von maven, das Beenden des Dienstes und die Ausgabe eines Beendigungscodes behandelt. Dies hat jedoch nicht funktioniert, da der Befehl mvn
in der Befehlszeile nicht verfügbar war. Unsere Jenkins hat mehrere Maven-Versionen (und auch jdks) verfügbar und ich weiß nicht, wo sie auf den Sklaven leben oder wie man sie erreicht, ohne den Invoke Maven 3
Build-Schritt zu benutzen.
Wir haben mit einigen Ideen herumgespielt, um dieses Problem zu lösen, aber wir hoffen, einige Hinweise von anderen zu bekommen, die ähnliche Probleme mit Jenkins gelöst haben könnten.
Es wäre schön, wenn Jenkins eine "Post-Build-Aktion" hätte, mit der Sie ein Bereinigungsskript ausführen könnten. Oder wenn es einen Erstellungsschritt "Hintergrundprozess ausführen" hatte, der die Hintergrundelemente am Ende des Builds beenden würde. Aber ich kann nichts dergleichen finden.
Hat jemand es geschafft, Jenkins dazu zu bringen, etwas Entferntes so zu machen?
Brainstorming:
Sie können Jenkins ProcessTreeKiller entweder global oder per Aufruf deaktivieren. Ich bin mir nicht sicher, warum das keine Option für dich ist.
Als Antwort auf # 2, mehrere Optionen:
Sie können den Build-Status basierend auf RegEx-Kriterien mit Text ändern -Finder-Plugin
Sie können Bedingte Build-Schritte . Die "Bedingung" könnte sogar ein Ergebnis einer Skriptausführung sein
Tags und Links jenkins