Sb Lon
Sb Lon

Reputation: 111

How to grab a particular log file and show its content in jenkins Console output

I have the following Jenkins post-build shell script:

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

This script restarts my_service on a remote host (my_server).

My problem is: command service my_service start just makes a request to RUNIT to run a my_service, i.e service my_service start returns immediately after execution.

But service my_service start runs a SpringBoot java web application that writes all log info into .../logs/current log file. To catch this log info I've added command tail -f /opt/services/my_service/logs/current but in this case Jenkins build is never ends)) such as tail -f command never stops.

Is there a way to execute my post-build script (which only start my web app on a remote server) and grabbing the .../logs/current log file during 2 minutes or until this log has the line "Web app MyApplication has been Started".

I wanna see the content of .../logs/current log file right in Jenkins's Console output and kill tail -f after 2 minutes

Upvotes: 6

Views: 4334

Answers (1)

Nir Levy
Nir Levy

Reputation: 12953

tail -f will not end until it gets interrupted, so your script will never finish running.

what you can do is use grep -q on your log, which will exit with 0 exit status when it finds it's pattern:

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

Upvotes: 3

Related Questions