从 Jenkins 中的 curl 获取 shell 错误代码,同时仍在控制台中显示输出

Mat*_*ner 2 bash curl tee jenkins

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

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

curl ...params... | tee /dev/tty | \
  xargs -I{} test "Expected output string" = '{}'
Run Code Online (Sandbox Code Playgroud)

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

tee: /dev/tty: No such device or address
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*jer 5

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

也许你可以把它寄给/dev/stderr?它将是交互式会话中的终端和非交互式会话中的一些日志文件。