Aggregieren der Ergebnisse von nachgeordneten parametrisierten Jobs in Jenkins

9

Ich habe einen Jenkins-Build-Job, der mehrere Test-Jobs mit dem Testnamen als Parameter unter Verwendung des Jenkins-parametrisierten Trigger-Plugins auslöst. Dies startet eine Reihe von Test-Builds auf mehreren Executoren, die alle korrekt ausgeführt werden.

Ich möchte nun die Ergebnisse aggregieren, indem ich "Aggregate Downstream Testergebnisse - Aggregation aller Downstream-Tests automatisch zusammenfassen". Ich habe dies im Build-Job aktiviert und Fingerprinting eingerichtet, damit diese als Downstream-Jobs erkannt werden. In der Build-Jobs lastBuild-Seite kann ich sehen, dass sie als Downstream-Builds erkannt werden:

  

Downstream-Builds

     

Test # 1- # 3

Wenn ich auf "Aggregierte Testergebnisse" klicke, wird jedoch nur die letzte davon angezeigt (Test # 3). Dies kann ein gutes Verhalten sein, wenn der Job immer die gleichen Tests ausführt, aber alle meine verschiedenen Teile meiner Testsuite ausführen.

Gibt es eine Möglichkeit, wie ich alle relevanten Downstream-Test-Builds zusammenfassen kann?

Zusätzlich: Aggregierte Testergebnisse funktionieren, wenn Sie den Testjob replizieren. Dies ist nicht ideal, da ich eine große Anzahl von Testsuiten habe.

    
Russell Gallop 10.05.2012, 12:56
quelle

1 Antwort

3

Ich werde die manuelle Lösung umreißen (wie in den Kommentaren erwähnt) und weitere Einzelheiten angeben, wenn Sie sie später brauchen:

Seien P der übergeordnete Job und D ein nachgelagerter Job (Sie können den Ansatz leicht auf mehrere nachgeordnete Jobs erweitern).

  1. Eine Instanz (Build) von P ruft D über Parametrisiertes Trigger-Plugin über einen Build-Schritt ( nicht als Post-Build-Schritt) und wartet darauf, dass D beendet wird. Zusammen mit anderen Parametern übergibt P an D einen Parameter - nennen wir ihn PARENT_ID - basierend auf P Build BUILD_ID .
  2. D führt die Tests aus und archiviert sie als Artefakte (zusammen mit jUnit-Berichten - falls zutreffend).
  3. P führt dann ein externes Python-Skript (oder internes Groovy-Skript) aus, das den passenden Build von D über PARENT_ID (Sie iteriert über Builds von D und prüfe den Wert des Parameters PARENT_ID . Das Skript kopiert dann die Artefakte von D in P und P veröffentlicht sie.

Wenn Sie Python verwenden (das mache ich) - verwenden Sie den Python JenkinsAPI-Wrapper . Wenn Sie Groovy verwenden, verwenden Sie das Groovy-Plugin und führen Sie Ihr Skript als Systemskript aus. Sie können Jenkins dann über seine Java API erreichen.

    
malenkiy_scot 12.05.2012, 18:06
quelle

Tags und Links