2

我在 Jenkins 中使用了一个 shell 脚本,它在某个时候使用 curl 将文件上传到服务器。我想看看 curl 产生的任何输出,但还要检查它是否是我期望的输出。如果不是,那么我想将 shell 错误代码设置为 > 0,以便 Jenkins 知道脚本失败。

我第一次尝试使用curl -f,但这会导致一旦上传失败,管道就会被切断,并且错误输出永远不会到达客户端。然后我尝试了这样的事情:

curl ...params... | tee /dev/tty | \
  xargs -I{} test "Expected output string" = '{}'

这适用于普通的 SSH shell,但在 Jenkins 控制台输出中我看到:

tee: /dev/tty: No such device or address

我不确定为什么会这样,因为我认为 Jenkins 正在使用普通的 SSH shell 与从站通信。无论如何,整个 xargs + test 事情让我觉得有点像黑客。

有没有办法在 Jenkins 中完成此操作,以便我可以看到输出并测试它是否与特定字符串匹配?

4

2 回答 2

5

当 Jenkins 通过 SSH 与 slave 通信时,没有分配终端,因此/dev/tty该进程没有设备。

也许您可以将其发送到/dev/stderr?它将是交互式会话中的终端和非交互式会话中的一些日志文件。

于 2011-09-23T16:36:52.097 回答
0

您是否考虑过使用Publish over SSH 插件而不是 curl?可能会让你头疼。

如果您只是将文件从 master 复制到 slave 还有一个插件,请复制到 slave Plugin

还不能写任何评论,所以我不得不将其发布为答案。

于 2011-09-23T16:35:46.560 回答