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

如何在Jenkins中打印shell脚本的输出并解析其结果? 我的问题,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,考虑使用以下行创建Jenkins文件: sh('sudo-E make upload') 该脚本打印了大量调试数据,其最后一行输出是目标URL,我希望在下一阶段使用该URL 如果在没有参数的情况下运行sh,则无法获取结果。如果我使用returnStdout:true运行它,我会得到结果,但调试行不会在运行时打印出来 我的问题 在Jenkins上执行shell脚本时,如何打印其输出,并以字符串形式访问其标准输出?TL;博士 在第一个命令上使用,并读取输出文件 sh('sudo-E make up

考虑使用以下行创建Jenkins文件:

sh('sudo-E make upload')
该脚本打印了大量调试数据,其最后一行输出是目标URL,我希望在下一阶段使用该URL

如果在没有参数的情况下运行
sh
,则无法获取结果。如果我使用
returnStdout:true
运行它,我会得到结果,但调试行不会在运行时打印出来

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

TL;博士 在第一个命令上使用,并读取输出文件

sh('sudo-E make upload | tee url'))
url=sh(脚本:'tail-1url | grep“^https://.*$”,returnStdout:true)。trim()
工作原理
tee
make upload
的标准输出重定向到标准输出和名为
url
的文件。输出通常打印在屏幕上,因此在Jenkins UX上可见。第二个命令从
url
提取所需的输出

这可能有效:

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

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

此解决方案是危险的:sudo-E make upload的失败不会导致jenkins失败。更好的附加
;退出\${PIPESTATUS[0]}“
到shell管道:
sh('sudo-E make upload | tee url;退出\${PIPESTATUS[0]}”)