如何在Jenkins 2.0管道作业中执行命令,然后返回标准输出
有没有更好的方法在Jenkins 2.0管道中运行shell任务,然后返回命令的如何在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
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脚本两次并不酷