Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Jenkins 2.0管道作业中执行命令,然后返回标准输出_Jenkins_Groovy_Jenkins Workflow_Jenkins Pipeline_Jenkins 2 - Fatal编程技术网

如何在Jenkins 2.0管道作业中执行命令,然后返回标准输出

如何在Jenkins 2.0管道作业中执行命令,然后返回标准输出,jenkins,groovy,jenkins-workflow,jenkins-pipeline,jenkins-2,Jenkins,Groovy,Jenkins Workflow,Jenkins Pipeline,Jenkins 2,有没有更好的方法在Jenkins 2.0管道中运行shell任务,然后返回命令的stdout。我能让它工作的唯一方法是通过管道将命令的输出传输到一个文件,然后将该文件读入一个变量 sh('git config--get remote.origin.url>git\u url') def stdout=readFile('GIT_URL').trim() 这似乎是返回输出的一种非常糟糕的方法。我希望我能做一些类似的事情: def stdout=sh('git config--get remote

有没有更好的方法在Jenkins 2.0管道中运行shell任务,然后返回命令的
stdout
。我能让它工作的唯一方法是通过管道将命令的输出传输到一个文件,然后将该文件读入一个变量

sh('git config--get remote.origin.url>git\u url')
def stdout=readFile('GIT_URL').trim()
这似乎是返回输出的一种非常糟糕的方法。我希望我能做一些类似的事情:

def stdout=sh('git config--get remote.origin.url').stdout

def exitcode=sh('git config--get remote.origin.url').exitcode 这可能吗?

更新 自2016年6月起正式标记为已解决。因此,在尝试下面的解决方法之前,首先尝试支持
sh
/
bat
,这样就可以使用
returnStdout
returnStatus
参数

权变措施 不幸的是,此功能仍然不受支持且缺失。有关更多信息,请参阅官方网站:

JENKINS-26133外壳脚本获取/返回输出/状态: 受让人:优先权:决议:未决Jesse Glick Major未解决


描述

当前sh没有有意义的返回值,并引发异常 如果退出状态不是零。如果有选择的话,那就太好了 将退出代码(零或否)作为整数值返回:

def r = sh script: 'someCommand', returnStatus: true
当前解决方法:

sh 'someCommand; echo $? > status' 
def r = readFile('status').trim()
sh 'dumpStuff.sh > result'
def lines = readFile('result').split("\r?\n")
writeFile file: 'input', text: someText >     sh 'loadStuff.sh < input'
或者让它返回其标准输出(类似于shell backticks):

解决方法:

sh 'someCommand; echo $? > status' 
def r = readFile('status').trim()
sh 'dumpStuff.sh > result'
def lines = readFile('result').split("\r?\n")
writeFile file: 'input', text: someText >     sh 'loadStuff.sh < input'
或者让它在标准输入上接收一些内容:

sh script: 'loadStuff.sh', stdin: someText
解决方法:

sh 'someCommand; echo $? > status' 
def r = readFile('status').trim()
sh 'dumpStuff.sh > result'
def lines = readFile('result').split("\r?\n")
writeFile file: 'input', text: someText >     sh 'loadStuff.sh < input'
writeFile文件:'input',text:someText>sh'loadStuff.sh
可能需要在持久任务中更改一些API

是的,如前所述,Pipeline Nodes and Process插件的2.4版现在支持这类功能:

def stdout = sh(script: 'git config --get remote.origin.url', returnStdout: true)
println stdout

def retstat = sh(script: 'git config --get remote.origin.url', returnStatus: true)
println retstat
似乎如果您尝试在同一个脚本中返回这两个,returnStatus将覆盖ReturnsDout,这有点不幸

您可以在官方文档中阅读更多内容

编辑:
此外,它还允许您对失败/不稳定的构建状态进行更细粒度的控制。你可以在我的评论中看到一个例子

我们可以一起使用它们吗?在一个变量中捕获ReturnsDout,在另一个变量中捕获returnStatus?因为重复sh脚本两次并不酷