我怎样才能得到一个使用从Jenkinsfile(groovy)variables执行的shell命令的输出?

我在Jenkinsfile(Groovy)上有这样的东西,我想将stdout和退出代码logging在一个variables中,以便稍后使用这些信息。

sh "ls -l" 

我怎么能这样做,特别是因为你似乎不能真正运行Jenkinsfile任何一种groovy代码?

pipe道sh步骤的最新版本允许您执行以下操作;

 // Git committer email GIT_COMMIT_EMAIL = sh ( script: 'git --no-pager show -s --format=\'%ae\'', returnStdout: true ).trim() echo "Git committer email: ${GIT_COMMIT_EMAIL}" 

另一个未logging的(现在)function是returnStatus选项。

 // Test commit message for flags BUILD_FULL = sh ( script: "git log -1 --pretty=%B | grep '\\[jenkins-full]'", returnStatus: true ) == 0 echo "Build full flag: ${BUILD_FULL}" 

这些选项是根据这个问题添加的。

快速的答案是这样的:

 sh "ls -l > commandResult" result = readFile('commandResult').trim() 

我想有一个function请求能够得到sh step的结果,但据我所知,目前没有别的select。

编辑: JENKINS-26133

编辑2:不太确定,因为什么版本,但现在sh /蝙蝠步骤可以返回标准输出,只是:

 def output = sh returnStdout: true, script: 'ls -l' 

当前pipe道版本本身支持returnStdoutreturnStatus ,这使得可以从sh / bat步骤获得输出或状态。

一个例子:

 def ret = sh(script: 'uname', returnStdout: true) println ret 

官方文件 。

这是一个示例,这将是有道理的,我相信!

 node('master'){ stage('stage1'){ def commit = sh (returnStdout: true, script: '''echo hi echo bye | grep -o "e" date echo lol''').split() echo "${commit[-1]} " } }