我在Jenkinsfile (Groovy)上有类似的东西,我想在一个变量中记录标准输出和退出码,以便以后使用这些信息。
sh "ls -l"
我该如何做到这一点呢,特别是当您似乎无法在Jenkinsfile中真正运行任何类型的groovy代码时?
我在Jenkinsfile (Groovy)上有类似的东西,我想在一个变量中记录标准输出和退出码,以便以后使用这些信息。
sh "ls -l"
我该如何做到这一点呢,特别是当您似乎无法在Jenkinsfile中真正运行任何类型的groovy代码时?
当前回答
这是一个例子,我相信这是有意义的!
node('master'){
stage('stage1'){
def commit = sh (returnStdout: true, script: '''echo hi
echo bye | grep -o "e"
date
echo lol''').split()
echo "${commit[-1]} "
}
}
其他回答
这是一个例子,我相信这是有意义的!
node('master'){
stage('stage1'){
def commit = sh (returnStdout: true, script: '''echo hi
echo bye | grep -o "e"
date
echo lol''').split()
echo "${commit[-1]} "
}
}
最新版本的管道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}"
}
对于那些需要在后续shell命令中使用输出的人,而不是groovy,可以像这样做:
stage('Show Files') {
environment {
MY_FILES = sh(script: 'cd mydir && ls -l', returnStdout: true)
}
steps {
sh '''
echo "$MY_FILES"
'''
}
}
我发现code maven上的示例非常有用。
当前的Pipeline版本本机支持returnStdout和returnStatus,这使得从sh/bat步骤中获得输出或状态成为可能。
一个例子:
def ret = sh(script: 'uname', returnStdout: true)
println ret
正式文件。
以上方法都是可行的。但是要在你的代码中使用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命令的输出。