我在Jenkinsfile (Groovy)上有类似的东西,我想在一个变量中记录标准输出和退出码,以便以后使用这些信息。
sh "ls -l"
我该如何做到这一点呢,特别是当您似乎无法在Jenkinsfile中真正运行任何类型的groovy代码时?
我在Jenkinsfile (Groovy)上有类似的东西,我想在一个变量中记录标准输出和退出码,以便以后使用这些信息。
sh "ls -l"
我该如何做到这一点呢,特别是当您似乎无法在Jenkinsfile中真正运行任何类型的groovy代码时?
当前回答
简单的回答是:
sh "ls -l > commandResult"
result = readFile('commandResult').trim()
我认为存在一个特性请求能够得到sh步骤的结果,但据我所知,目前没有其他选择。
编辑:詹金斯- 26133
EDIT2:不太确定从哪个版本开始,但是sh/bat步骤现在可以返回std输出,简单地说:
def output = sh returnStdout: true, script: 'ls -l'
其他回答
最简单的方法就是用这种方法
my_var = '回声2》 echo $ my_var 输出 : 2
注意不是简单的单引号是反引号(')。
最新版本的管道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}"
另一个特性是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命令请参见官方文档。
对于声明式管道(见注释),你需要将代码包装到脚本步骤:
script {
GIT_COMMIT_EMAIL = sh (
script: 'git --no-pager show -s --format=\'%ae\'',
returnStdout: true
).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"
}
这是一个例子,我相信这是有意义的!
node('master'){
stage('stage1'){
def commit = sh (returnStdout: true, script: '''echo hi
echo bye | grep -o "e"
date
echo lol''').split()
echo "${commit[-1]} "
}
}
以上方法都是可行的。但是要在你的代码中使用var作为env变量,你需要先导出var。
script{
sh " 'shell command here' > command"
command_var = readFile('command').trim()
sh "export command_var=$command_var"
}
用您选择的命令替换shell命令。现在,如果你正在使用python代码,你可以指定os.getenv("command_var"),它将返回之前执行的shell命令的输出。
当前的Pipeline版本本机支持returnStdout和returnStatus,这使得从sh/bat步骤中获得输出或状态成为可能。
一个例子:
def ret = sh(script: 'uname', returnStdout: true)
println ret
正式文件。