如何在Jenkins控制台输出中获取特定的日志文件并显示其内容

6

我有以下Jenkins后构建shell脚本:

ssh user@my_server <<EOF
  service my_service stop
  service my_service start
  tail -f /opt/services/my_service/logs/current
  exit
EOF

这个脚本重新启动远程主机(my_server)上的 my_service。

问题在于:命令 service my_service start 只是向 RUNIT 发出运行 my_service 的请求,即 service my_service start 执行后立即返回。

但是 service my_service start 运行一个 SpringBoot Java Web 应用程序,将所有日志信息写入 .../logs/current 日志文件中。为了捕获此日志信息,我添加了命令 tail -f /opt/services/my_service/logs/current,但在这种情况下,Jenkins 构建永远不会结束,因为 tail -f 命令永远不会停止。

有没有一种方法可以执行我的 post-build 脚本(仅在远程服务器上启动我的 Web 应用程序),并在 2 分钟内或直到此日志具有 "Web 应用程序 MyApplication 已启动" 行时抓取 .../logs/current 日志文件。

我想在 Jenkins 的 控制台输出 中看到 .../logs/current 日志文件的内容,并在 2 分钟后终止 tail -f

1个回答

3

tail -f指令不会在被中断之前结束,因此您的脚本将永远无法完成运行。

您可以在日志上使用grep -q指令,它会在找到模式时以0退出状态退出:

grep -q 'Web app MyApplication has been Started' <(tail -f /opt/services/my_service/logs/current)

太好了。我能否将此命令执行限制在2分钟内?如果部署出现问题,“Web应用程序MyApplication已启动”将不会出现在控制台中。 - Sb Lon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接