Is it possible to capture the stdout from the sh DSL command in the pipeline
Now, the sh
step supports returning stdout by supplying the parameter returnStdout
.
// These should all be performed at the point where you've// checked out your sources on the slave. A 'git' executable// must be available.// Most typical, if you're not cloning into a sub directorygitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()// short SHA, possibly better for chat notifications, etc.shortCommit = gitCommit.take(6)
See this example.
Note: The linked Jenkins issue has since been solved.
As mention in JENKINS-26133 it was not possible to get shell output as a variable. As a workaround suggested using of writ-read from temporary file. So, your example would have looked like:
sh "echo foo > result";def output=readFile('result').trim()echo "output=$output";
Try this:
def get_git_sha(git_dir='') { dir(git_dir) { return sh(returnStdout: true, script: 'git rev-parse HEAD').trim() }}node(BUILD_NODE) { ... repo_SHA = get_git_sha('src/FooBar.git') echo repo_SHA ...}
Tested on:
- Jenkins ver. 2.19.1
- Pipeline 2.4