2015-05-07 5 views
24

Ich trigger ein Shell-Skript von Jenkins, diese Skripte erhalten Datum und exportieren Sie es als eine Umgebung (Linux) Variable $ DATE. Ich muss dieses $ DATE innerhalb desselben Jenkins-Jobs verwenden. Ich habe Job als Parameter-Build gemacht. Erstellt einen Zeichenfolgenparameter als DATE-Wert wie DATE = $ DATE. Aber es funktioniert nicht.Übergeben Variable von Shell-Skript zu Jenkins

Bitte schlagen Sie vor !!

+0

Es ist unklar, was Sie sagen - stellen Sie 'DATE' als Parameter ein, oder exportieren Sie' DATE' von einem "Execute Shell" -Bauschritt? –

+0

Hallo, ich versuche, es aus dem Skript zu exportieren, das innerhalb Jenkins-Job zu demselben Jenkins-Job ausgeführt wird. – user3232823

Antwort

55

Sie erwähnen, dass Sie eine Umgebungsvariable DATE in ein Shell-Skript exportieren, das vermutlich über einen Schritt "Shell ausführen" gestartet wird.

Das Problem ist, dass, sobald der Shell-Schritt abgeschlossen ist, diese Umgebung verschwunden ist - die Variablen werden nicht auf nachfolgende Build-Schritte übertragen.
Wenn Sie also später versuchen, den $DATE-Wert zu verwenden - ob in einem anderen Build-Schritt oder als Parameter für einen anderen Job -, wird diese bestimmte Umgebungsvariable nicht mehr existieren.

Sie können stattdessen EnvInject plugin verwenden, um Umgebungsvariablen während eines Builds zu exportieren. Variablen, die mit diesem Plugin eingerichtet werden, sind für alle nachfolgenden Build-Schritte verfügbar.

Zum Beispiel könnten Sie die DATE auf ein Eigenschaftenfeld in einem Build-Schritt schreiben:

echo DATE=$(date +%Y-%m-%d) > env.properties 

Dann können Sie eine bauen Schritt „Umgebungsvariablen für Ihren Job Inject“ hinzufügen, und geben Sie env.properties im " Feld "Pfad" der Eigenschaft "Umgebungseigenschaften".

Auf diese Weise wird die DATE Variable (und alles andere in dieser Eigenschaftendatei) exportiert und ist für den Rest der Build-Schritte sichtbar.

+0

Sehr gute Lösung. Danke – user55926

+0

Danke. Es ist bedauerlich, dass Jenkins diese Funktionalität standardmäßig nicht unterstützt. Was ich suchte, ist eine bessere Möglichkeit, alle in einem Shell-Skript gesetzten Variablen automatisch in die Eigenschaftendatei in einem einzigen Befehl auszugeben. Einer meiner Jobs muss ungefähr 15 Variablen basierend auf Verzeichnissen, Dateinamen, Zeitstempeln usw. erstellen. Ich würde dann 15 echo-Befehle benötigen, um sie in die Eigenschaftendatei auszugeben. Und wenn ich zusätzliche Variablen hinzufügen würde, müsste ich auch sicherstellen, dass sie ausgegeben werden. Es wäre schön, einen Befehl ähnlich wie "env" ausführen zu können, der alle definierten Variablen ausgibt. – leeman24

+0

Es ist in der Tat bedauerlich, dass Jenkins es nicht out of the box unterstützt. Danke für diese Antwort. –