【发布时间】:2021-10-29 11:51:45
【问题描述】:
我在使用 groovy 脚本时遇到了一些问题;
sh '''
echo \'Starting script\';
sleep 5;
echo \'pwd\';
sleep 5;
pwd;
sleep 5;
find / -name jenkins.war -type f;
sleep 5;
'''
执行时间较长的命令总是会导致管道失败;除find 外的所有命令均成功运行。在日志(浏览器)中,在管道失败之前显示了许多文件并显示消息:
Jenkins build has status: FAILURE. Notifying Bitbucket with state: FAILED.
问题是无法直接访问 jenkins 服务器(没有简单的方法来检查日志)。
我不确定我是否以正确的方式进行此操作,但是否有任何设置可能导致此类行为?
【问题讨论】:
-
您如何处理
find ...result?只需在构建的控制台输出中打印它,还是有更多您没有向我们展示的周围管道代码?从根目录查找可能需要一段时间。您可能遇到服务器超时或运行脚本的用户无权访问某些目录/文件。我会尝试根据How to return stdout and stderr together with the status from a Jenkins Pipeline sh script step 的答案返回stderr。 -
@GeroldBroser 是的,结果用于显示版本(java -jar
find / -name jenkins.war -type f--version)。是的,有些文件 find 给出了permission denied,但奇怪的是,一些没有权限的文件仍然打印到日志中。 -
为什么这很奇怪?这是
find对stderr的输出。我绝对希望在日志中看到 any 命令(或 any 程序,就此而言)的错误输出,以防出现问题。跨度> -
@IanW 如果您参考 [jenkins-]groovy 标签:管道步骤(此处为
sh)在技术上是 Groovy 方法(尽管这不是问题的原因在这里)。 -
@Sebi Jenkins not 在 stderr 上终止。见How to return stdout and stderr together with the status from a Jenkins Pipeline sh script step。
标签: jenkins groovy jenkins-pipeline jenkins-groovy