我怎样才能得到一个使用从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道版本本身支持returnStdout
和returnStatus
,这使得可以从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]} " } }