webentwicklung-frage-antwort-db.com.de

So führen Sie einen Befehl in einem Jenkins 2.0-Pipeline-Job aus und geben dann die Standardausgabe zurück

Gibt es eine bessere Möglichkeit, eine Shell-Task in einer Jenkins 2.0-Pipeline auszuführen und anschließend das stdout des Befehls zurückzugeben? Die einzige Möglichkeit, dies zum Laufen zu bringen, besteht darin, die Ausgabe des Befehls in eine Datei umzuleiten und die Datei dann in eine Variable einzulesen.

sh('git config --get remote.Origin.url > GIT_URL')
def stdout = readFile('GIT_URL').trim()

Dies scheint eine wirklich schlechte Möglichkeit zu sein, die Ausgabe zurückzugeben. Ich hatte gehofft, ich könnte etwas machen wie:

def stdout = sh('git config --get remote.Origin.url').stdout

oder

def exitcode = sh('git config --get remote.Origin.url').exitcode

Ist das möglich?

20
user6253266

Ja, wie luka5z erwähnt, unterstützt Version 2.4 des Pipeline Nodes and Processes Plugins jetzt diese Art von Sachen:

def stdout = sh(script: 'git config --get remote.Origin.url', returnStdout: true)
println stdout

def retstat = sh(script: 'git config --get remote.Origin.url', returnStatus: true)
println retstat

Scheint, wenn Sie versuchen, beide im selben Skript zurückzugeben, wird returnStatus returnStdout überschreiben, was etwas unglücklich ist.

Sie können mehr in der offiziellen Dokumentation lesen hier

Bearbeiten: Darüber hinaus können Sie den Status fehlgeschlagener/instabiler Builds genauer steuern. Sie können ein Beispiel in meinem Kommentar sehen hier

20
philbert

Update

Seit 6/2016 ist JENKINS-261 offiziell als Gelöst markiert. Versuchen Sie daher, bevor Sie die folgenden Problemumgehungen versuchen, zunächst die unterstützten Parameter Implementierung für sh/bat, mit denen die Parameter returnStdout und returnStatus verwendet werden können.

Problemumgehungen

Leider wird diese Funktion immer noch nicht unterstützt und fehlt. Weitere Informationen entnehmen Sie bitte dem offiziellen Ticket :

JENKINS-26133 Shell-Skript nimmt/gibt Ausgabe/Status zurück Status: Verantwortlicher: Priorität: Lösung: Öffnen Jesse Glick Major Ungelöst


Beschreibung

Derzeit hat sh keinen aussagekräftigen Rückgabewert und löst eine Ausnahme aus, wenn der Exit-Status nicht Null ist. Wäre schön, eine Option zu haben, die den Exit-Code (null oder nicht) als Ganzzahlwert zurückgibt:

def r = sh script: 'someCommand', returnStatus: true

Aktuelle Problemumgehung:

sh 'someCommand; echo $? > status' 
def r = readFile('status').trim()

Oder um die Standardausgabe (ähnlich wie bei Shell-Backticks) zurückzugeben:

def lines = sh(script: 'dumpStuff.sh', returnStdout: true).split("\r?\n")

Problemumgehung:

sh 'dumpStuff.sh > result'
def lines = readFile('result').split("\r?\n")

Oder um etwas auf Standardeingabe nehmen zu lassen:

sh script: 'loadStuff.sh', stdin: someText

Problemumgehung:

writeFile file: 'input', text: someText >     sh 'loadStuff.sh < input'

Erfordert wahrscheinlich einige API-Änderungen in der Funktion "Dauerhafte Aufgabe".

19
luka5z