Update
Since 6/2016 JENKINS-26133 is officially marked as Resolved. Therefore, before trying below workarounds, first try supported implementation for sh
/bat
which makes it possible to use returnStdout
and returnStatus
parameters.
Workarounds
Unfortunately this feature is still unsupported and missing. For more information please refer to official ticket:
JENKINS-26133 Shell script taking/returning output/status Status:
Assignee: Priority: Resolution: Open Jesse Glick Major Unresolved
Description
Currently sh has no meaningful return value, and throws an exception
if the exit status is not zero. Would be nice to have an option to
have it return the exit code (zero or not) as an integer value:
def r = sh script: 'someCommand', returnStatus: true
Current workaround:
sh 'someCommand; echo $? > status'
def r = readFile('status').trim()
Or to have it return its standard output (akin to shell backticks):
def lines = sh(script: 'dumpStuff.sh', returnStdout: true).split("\r?\n")
Workaround:
sh 'dumpStuff.sh > result'
def lines = readFile('result').split("\r?\n")
Or to have it take something on standard input:
sh script: 'loadStuff.sh', stdin: someText
Workaround:
writeFile file: 'input', text: someText > sh 'loadStuff.sh < input'
Probably requires some API changes in durable-task.