Search code examples
jenkinsgroovyjenkins-workflow

How to set the output of sh to a Groovy variable?


Is it possible to have the output of the sh command be set to a Groovy variable? It seems to be setting it to the status of the command instead.

Example input:

node {
   stage "Current Date"
   def curDate = sh "date"
   echo "The current date is ${curDate}"
}

Results in the following output:

Entering stage Current Date
Proceeding
[Pipeline] sh
[workspace] Running shell script
+ date
Tue May 10 01:15:05 UTC 2016
[Pipeline] echo
The current date is 0

It is showing The current date is 0, I want it to show The current date is Tue May 10 01:15:05 UTC 2016 which you can see has been output by the sh command. Am I going about this all wrong?


Solution

  • Yes, sh is returning the exit status. Currently your best bet is:

    sh 'date > outFile'
    curDate = readFile 'outFile'
    echo "The current date is ${curDate}"
    

    ADDENDUM: after this answer was written a new option was added to the sh step, use returnStdout: true to get the result string from the sh call.