我在Jenkinsfile (Groovy)上有类似的东西,我想在一个变量中记录标准输出和退出码,以便以后使用这些信息。

sh "ls -l"

我该如何做到这一点呢,特别是当您似乎无法在Jenkinsfile中真正运行任何类型的groovy代码时?


当前回答

对于那些需要在后续shell命令中使用输出的人,而不是groovy,可以像这样做:

    stage('Show Files') {
        environment {
          MY_FILES = sh(script: 'cd mydir && ls -l', returnStdout: true)
        }
        steps {
          sh '''
            echo "$MY_FILES"
          '''
        }
    }

我发现code maven上的示例非常有用。

其他回答

最简单的方法就是用这种方法

my_var = '回声2》 echo $ my_var 输出 : 2

注意不是简单的单引号是反引号(')。

以上方法都是可行的。但是要在你的代码中使用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命令的输出。

简单的回答是:

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

我认为存在一个特性请求能够得到sh步骤的结果,但据我所知,目前没有其他选择。

编辑:詹金斯- 26133

EDIT2:不太确定从哪个版本开始,但是sh/bat步骤现在可以返回std输出,简单地说:

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

当前的Pipeline版本本机支持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]} "

    }
}