wake-up-neo.net

Jenkins - Variablen zwischen Jobs übergeben?

Ich habe zwei Jobs in Jenkins, die beide den gleichen Parameter benötigen. 

Wie kann ich den ersten Job mit einem Parameter ausführen, damit beim Auslösen des zweiten Jobs derselbe Parameter verwendet wird?

69
Stefan Kendall

Sie können Parametrized Trigger Plugin verwenden, um Parameter von einer Task an eine andere zu übergeben.

Sie müssen auch diesen Parameter hinzufügen, den Sie von Upstream in Downstream übergeben haben.

64
Łukasz Rżanek

1.Post-Build-Aktionen> Wählen Sie "Auslöser parametrisiert für andere Projekte"

2.Geben Sie die Umgebungsvariable mit value ein. Der Wert kann auch Jenkins Build Parameters sein.

Detaillierte Schritte sind hier zu sehen: -

https://itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-von-one-job-to-another/

Hoffe es ist hilfreich :)

26
Vinu Joseph

Die akzeptierte Antwort hier funktioniert nicht für meinen Anwendungsfall. Ich musste in der Lage sein, Parameter dynamisch in einem Job zu erstellen und an einen anderen zu übergeben. Wie Mark McKenna erwähnt, gibt es scheinbar keine Möglichkeit, eine Variable aus einem Shell-Build-Schritt in die Post-Build-Aktionen zu exportieren.

Ich habe eine Problemumgehung mit dem Parametrisierten Trigger-Plugin erreicht, indem ich die Werte in eine Datei geschrieben habe und diese Datei als zu importierende Parameter über 'Post-Build-Aktion hinzufügen' -> 'Parametrisierte Build auslösen ...' und dann 'auswähle' Parameter hinzufügen '->' Parameter aus Eigenschaftendatei '.

16
Nigel Kirby

Ich denke, die Antwort oben muss aktualisiert werden:

Ich habe versucht, ein dynamisches Verzeichnis zum Speichern meiner Upstream-Build-Artefakte zu erstellen. Ich wollte meine Upstream-Job-Build-Nummer an den Downstream-Job übergeben. So funktioniert es:

  1. Ich habe die Artefakte aus meinem aktuellen Job mit dem Kopierartifakt-Plugin kopiert.
  2. In der Postbuild-Aktion des Upstream-Jobs habe ich die Variable "SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}" hinzugefügt und sie so konfiguriert, dass der Downstream-Job ausgelöst wird.
  3. Alles funktionierte, außer dass mein nachgelagerter Job $ SOURCE_BUILD_NUMBER nicht dazu brachte, das Verzeichnis zu erstellen.
  4. Also habe ich herausgefunden, dass ich, um diese Variable zu verwenden, dieselbe Variable im Downstream-Job als Parametervariable wie in der folgenden Abbildung definieren muss:

 enter image description here

Dies liegt daran, dass Sie für die neue Version von Jenkins die Variable auch im nachgelagerten Job definieren müssen. Ich hoffe es ist hilfreich.

10
Tarun

(für andere Googler)

Wenn Sie eine ernsthafte Pipeline mit dem Build Flow Plugin erstellen, können Sie die Parameter zwischen den Jobs mit dem DSL wie folgt übergeben:

Angenommen, ein verfügbarer Zeichenfolgeparameter "CVS_TAG", um ihn an andere Jobs zu übergeben:

build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
   // will be scheduled in parallel.
   { build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
   { build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])

Hinweis zur Anzeige der verfügbaren Variablen/Parameter:

// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'
9
Offirmo

Fügen Sie einfach meine Antwort zu Nigel Kirby hinzu, da ich noch nicht kommentieren kann:

Um einen dynamisch erstellten Parameter zu übergeben, können Sie die Variable auch in die Kachel 'Execute Shell' exportieren und dann durch 'Trigger parametrisierter Build für andere Projekte' => 'Vordefinierte Parameter' => 'YOUR_VAR = $ YOUR_VAR' übergeben. Mein Team verwendet diese Funktion, um die npm-Paketversion vom Build-Job an Bereitstellungsjobs zu übergeben

UPDATE: oben funktioniert nur für Jenkins-injizierte Parameter. Von Shell erstellte Parameter müssen dieselbe Methode verwenden. z.B. echo YOUR_VAR = $ {YOUR_VAR}> variable.properties und leiten diese Datei abwärts

7
Shawn

Sie können den Hudson Groovy Builder dazu verwenden.

Erster Job in der Pipeline

enter image description here

Zweiter Job in der Pipeline

enter image description here

2
CAMOBAP

Das gleiche Problem hatte ich, als ich eine Pom-Version an einen nachgeschalteten Rundeck-Job übergeben musste.

Was ich getan habe, war die Parameterinjektion über eine Eigenschaftsdatei als solche:

1) Erstellen von Eigenschaften in der Eigenschaftendatei über Shell:

Aktionen erstellen:

  • Führen Sie ein Shell-Skript aus
  • Umgebungsvariablen injizieren

E.g: Eigenschaftsdefinition

2) Übergeben definierter Eigenschaften an den nachgelagerten Job: Post Build-Aktionen: 

  • Trigger parametrisierter Build für ein anderes Projekt
  • Parameter hinzufügen: Aktuelle Build-Parameter
  • Parameter hinzufügen: vordefinierte Parameter

E.g: Eigenschaften senden

3) Es war dann möglich, $ POM_VERSION als solches im nachgeschalteten Rundeck-Job zu verwenden. 

/!\Jenkins Version: 1.636

/!\Beim Erstellen des ausgelösten Builds musste aus irgendeinem Grund die Option 'Aktuelle Buildparameter' hinzugefügt werden, um die Eigenschaften zu übergeben.

2
Eli Mous

Wenn ich die Antworten durchsehe, sehe ich keine andere Option, die ich so mag, und werde sie auch anbieten. Ich liebe die Parametrisierung von Jobs, aber sie lässt sich nicht immer gut skalieren. Wenn Sie Jobs haben, die nicht direkt hinter dem ersten Job liegen, sondern weiter in der Pipeline sind, möchten Sie nicht wirklich jeden Job in der Pipeline parametrisieren, um die Parameter vollständig übergeben zu können. Wenn Sie eine Vielzahl von Parametern verwenden, die von einer Vielzahl anderer Jobs verwendet werden (insbesondere diejenigen, die nicht unbedingt an einen übergeordneten oder Master-Job gebunden sind), funktioniert die Parametrierung erneut nicht.

In diesen Fällen ziehe ich es vor, die Werte in eine Eigenschaftendatei auszugeben und diese dann in jeden Job einzuspeisen, den ich mit dem EnvInject plugin benötige. Dies kann dynamisch erfolgen. Dies ist ein weiterer Weg, um das Problem aus einer anderen Antwort oben zu lösen, bei der noch parametrisierte Jobs verwendet wurden. Diese Lösung lässt sich in vielen Szenarien sehr gut skalieren.

2
tbradt

Siehe meine Antwort in diesem anderen Beitrag:

Für mich gearbeitet (Parameter muss in beiden Jobs angegeben werden, nicht nur im übergeordneten Job)

https://stackoverflow.com/a/40348900/2010136

0
user2010136