如何在Jenkins中打印shell脚本的输出并解析其结果?

时间:2018-07-17 13:19:04

标签: jenkins jenkins-pipeline

我的问题

使用以下行考虑Jenkinsfile:

sh('sudo -E make upload')

该脚本会打印很多调试数据,它的最后输出行是目标URL,我想在下一阶段使用它。

如果我不带任何参数运行sh,则无法获取结果。如果我使用returnStdout: true运行它,则会得到结果,但调试行不会随时打印。

我的问题

在Jenkins上执行时,如何打印shell脚本的输出,并以字符串形式访问其标准输出?

2 个答案:

答案 0 :(得分:2)

TL; DR

在第一个命令上使用tee,然后读取输出文件。

sh ('sudo -E make upload | tee url')
url = sh (script: 'tail -1 url | grep "^https://.*$"', returnStdout: true).trim()

工作原理

teemake upload的标准输出重定向到标准输出和一个名为url的文件。输出通常会打印在屏幕上,因此在Jenkins UX上可见。第二条命令从url中提取所需的输出。

答案 1 :(得分:0)

这可能有效:

sh (script: 'sudo -E make upload', returnStdout: true).readLines().last()

但是如果您在Groovy沙箱中运行,则可能需要将其列入白名单。