2016-04-04 7 views
18

Ich versuche, ein Multi-Konfigurationsprojekt zu erstellen, das eine Reihe von Builds testet, die eine Kompatibilitätsmatrix definiert (z. B. von Browser und OS). Ich möchte die Schritte für eine einzelne Kombination über Jenkinsfile definieren.Verwenden von Multi-Konfigurationsprojekten mit Jenkinsfile (Build-Pipeline-Plugin)

Wie kann ich das erreichen? Ich kann einen pipeline-basierten Build erstellen, der von JenkinsFile abhängt, aber ich kann nicht herausfinden, wie man ihn mit dem Multi-Konfigurations-Build verbindet.

+0

Die Gewährung der Bounty bedeutet im Allgemeinen, dass Sie auch die Antwort akzeptieren sollten. – rbellamy

Antwort

4

Es scheint nicht möglich zu sein, eine Jenkins-Datei als Buildschritt in einem Multi-Konfigurationsprojekt zu haben. Eine Jenkins-Datei wird in einem Pipeline-Job verwendet, der ebenfalls ein Jobtyp ist, und Jenkins unterstützt keine (einfache) Konvertierung zwischen Jobtypen. Darüber hinaus bedeutet ein Buildschritt, dass er auf einem bestimmten Knoten in einem Executor-Slot ausgeführt wird. Eine Jenkins-Datei wird jedoch auf dem Master ausgewertet und definiert selbst Buildschritte (mit ihren Knotenbeschriftungen), die inhärent kollidieren würden, wenn sie in einem Buildschritt selbst ausgeführt würden.

Es ist möglich, eine Pipeline über einen Job mit mehreren Konfigurationen auszulösen und sie mit den Parametern aus dem Job mit mehreren Konfigurationen zu versorgen. (Ich habe auch die parametrisierte Trigger-Plugin, dies zu tun)

Meine Pipeline Job hat zwei Textparameter, label und version mit einem Beispiel Jenkinsfile die wie folgt aussieht:

node(this.label){ 
    println this.version 
} 

Mein Multi-Konfigurations-Job hat die folgende Konfiguration:

  • eine benutzerdefinierte Achse version mit Werten alpha beta gamma und eine Slave-Achse label mit einem ausgewählten Knoten
  • Die buildstep „Trigger/call baut auf anderen Projekten“ zu meinen Pipeline Job mit vordefinierten Parametern version=${version} und label=${label}

Dieser Aufbau führt zu der Pipeline Job auslösen 3 Mal aufgerufen wird (wie ich nur ein Knoten ausgewählt haben) , jedes Mal mit einer anderen Version und läuft auf meinem angegebenen Label. Hier ist eines der Protokolle:

[Pipeline] node 
Running on master in /var/lib/jenkins/jobs/pipelinejob/workspace 
[Pipeline] { 
[Pipeline] echo 
gamma 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

Diese Lösung funktioniert, wenn Sie nur textbasierte Parameter oder Markennamen übergeben wollen. Es wird wesentlich schwieriger zu verwenden, wenn Sie etwas wie "Build mit verschiedenen Jdks" machen wollen. Ich hoffe, es ist trotzdem hilfreich.

Verwandte Themen