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

发布于 2024-12-06 08:03:44 字数 594 浏览 0 评论 0原文

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

我首先尝试使用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 中完成此任务,以便我可以查看输出并测试它是否与特定字符串匹配?

I am using a shell script in Jenkins that, at a certain point, uploads a file to a server using curl. I would like to see whatever output curl produces but also check whether it is the output I expect. If it isn't, then I want to set the shell error code to > 0 so that Jenkins knows the script failed.

I first tried using curl -f, but this causes the pipe to be cut as soon as the upload fails and the error output never gets to the client. Then I tried something like this:

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

This works from a normal SSH shell but in the Jenkins console output I see:

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

I'm not sure why this is since I thought Jenkins was communicating with the slave using a normal SSH shell. In any case, the whole xargs + test thing strikes me as a bit of a hack.

Is there a way to accomplish this in Jenkins so that I can see the output and also test whether it matches a specific string?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

壹場煙雨 2024-12-13 08:03:44

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

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

When Jenkins communicates with slave via SSH, there is no terminal allocated, and so there is no /dev/tty device for that process.

Maybe you can send it to /dev/stderr instead? It will be a terminal in an interactive session and some log file in non-interactive session.

┼── 2024-12-13 08:03:44

您是否考虑过使用通过 SSH 插件发布使用卷曲?可能会让你省点头痛。

如果您只是将文件从主服务器复制到从服务器,还有一个插件, 复制到从属插件

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

Have you thought about using the Publish over SSH Plugin instead of using curl? Might save you some headache.

If you just copy the file from master to slave there is also a plugin for that, copy to slave Plugin.

Cannot write any comments yet, so I had to post it as an answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文