【问题标题】:Log output shows in Jenkins while running bash script to execute Java code运行 bash 脚本以执行 Java 代码时在 Jenkins 中显示日志输出
【发布时间】:2015-11-14 05:18:56
【问题描述】:

首先让我描述一下我的问题。 我配置了 Jenkins,并在构建操作后调用 shell 脚本在远程服务器上运行 bash 脚本。 shell脚本通过命令启动应用程序

java -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=xxx 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-XX:+HeapDumpOnOutOfMemoryError -jar name.jar "BUILD_PARAMETER"

我在 Jenkins 构建中看到来自我的应用程序的日志,并且它保持构建过程运行。我需要在运行后完成它 sh 运行命令。有可能吗?

【问题讨论】:

  • 您是否尝试从 Jenkins 服务器在另一台服务器上启动 shell 脚本?你的命令是什么?
  • @Naggi 是的,确切地说,在不同的服务器上。我试过 nohup sh run.shsh run.sh
  • 您在命令末尾缺少&。这就是将进程发送到后台的原因

标签: java linux bash shell jenkins


【解决方案1】:

你的 shell 脚本需要 fork 一个进程并返回,否则 Jenkins 认为你的 shell 脚本仍在运行(如果它没有 fork 进程并返回)。

您尚未提供用于启动应用程序的命令,但在 linux 中 fork 进程的常用方法是:

nohup <your command here> &

【讨论】:

  • 我启动应用程序的命令是 run.sh 脚本的内容,它在主帖中。
  • 所以在你的run.sh文件中使用nohup java <your arguments> &
  • 我在 Jenkins 有 nohup sh run.sh & 但没有考虑改变 run.sh :)。我会试试这个。
  • Jenkins 仍然接收日志。我更新了 OP。我在 run.sh 脚本中的命令有参数,目前我没有在那里传递任何值。会不会影响&key?
【解决方案2】:

如果您使用 Jenkins 执行此操作,则需要使用 cmets 中的 nohup 表示法,并为进程指定非数字 PID。 Jenkins 尝试在作业完成后通过杀死它启动的所有进程来进行清理。

BUILD_ID=dontKillMe nohup &

上面的命令应该可以工作

https://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多