Konfigurieren Sie einen Hudson-Maven-Job, um weitere Tests durchzuführen, wenn Testfehler auftreten, aber nur dann, wenn keine Testfehler vorliegen

8

Ich habe einen Hudson Job für unser maven multi-project mit 5 Modulen erstellt, um die SNAPSHOT Artefakte in das maven Repository zu deployen. Das ist in Ordnung, solange es ohne Testfehler erfolgreich erstellt. Jetzt möchte ich jedoch die folgenden Anforderungen erfüllen:

  • Wenn ein Modul einen Testfehler aufweist, sollte der Build fortgesetzt werden und die anderen Module testen, aber gelb werden. Die Verwendung von -Dmaven.test.failure.ignore=true bewirkt, scheitert jedoch bei der nächsten Anforderung.
  • Wenn ein Modul einen Testfehler aufweist, sollte keines der Artefakte im maven-Repository bereitgestellt werden. Andere Projekte hängen von den Snapshots ab, die dieses Projekt und diese Projekte nur verwenden möchten die neuesten Snapshots habe keine fehlgeschlagenen Tests .
  • Verwenden Sie vorzugsweise die Hudson Maven-Integration anstelle eines freien Skripts, wir erhalten die Hudson-Berichtsseiten (roter / gelber / blauer Status pro Modul, Build-Log-Fehlerfarbe, ...). Das Ausführen des Maven-Builds zweimal (zuerst mvn test -Dmaven.test.failure.ignore=true , dann mvn deploy -DskipTests ) ist keine Lösung, da es einen Leistungsverlust darstellt und die Hudson-Berichtsseiten verwirrt und nicht atomar ist (es wird im zweiten Build erneut von den Repositorys aktualisiert).

Gibt es eine Möglichkeit, dies zu erreichen?

    
Geoffrey De Smet 04.03.2011, 16:02
quelle

4 Antworten

5

Es gibt eine Post-Build-Option namens Deployment von Artefakten in das Maven-Repository . Wenn Sie Bereitstellen nicht auswählen, selbst wenn der Build instabil ist , bedeutet das, dass bei fehlgeschlagenem Test nichts bereitgestellt wird. Zusammen mit dem -fae im Befehl sollte die Sache auf Ihre gewünschte Weise funktionieren.

    
Javabeginner 17.03.2011, 16:41
quelle
2

vielleicht können Sie versuchen, mvn -fae -Option mit Ihnen Jobs auf Hudson - es machen Maven erst nach dem vollständigen Build

    
Dmytro 09.03.2011 22:39
quelle
1

Wenn die Build-Zeit kein Problem für Sie ist, ist es meiner Meinung nach die bessere Option, einen anderen Job zu erstellen, nur für die Bereitstellung. Etwas wie das:

  1. Konfigurieren Sie Ihren ursprünglichen Job (nennen wir es "Build-Job") mit "mvn -fae clean install"
  2. Erstellen Sie einen neuen Job ("deploy job") mit "mvn deploy" und konfigurieren Sie keine Build-Trigger dafür
  3. Aktivieren Sie im "Build-Job" die Option Andere Projekte erstellen unter Post-Build-Aktionen und legen Sie fest, dass Ihr "deploy-Job" ausgeführt wird.

Vielleicht können Sie versuchen, beide Jobs so zu konfigurieren, dass sie den gleichen Arbeitsbereich verwenden, und sparen so Zeit für den gesamten Build / Deploy-Prozess.

    
deluan 15.03.2011 20:14
quelle
1

Wenn Sie Artifactory als Repository-Manager verwenden, können Sie das Hudson/Jenkins Artifactory-Plugin , um Ihre Artefakte bereitzustellen. Dieses Plugin wird nur dann Ihre Artefakte bereitstellen, wenn alle Tests für alle Module eines Maven Builds bestehen.

    
exo_cw 16.03.2011 15:22
quelle