Bash 脚本在 Jenkins 编译后重新启动 Java 应用程序

Bash 脚本在 Jenkins 编译后重新启动 Java 应用程序

我是linux菜鸟!我有我的服务器并安装了詹金斯。我需要创建 bash 脚本,该脚本应该在 jenkins 编译后运行应用程序(或者如果已经启动,则将重新启动)。我尝试在 Linux 中使用 screen util,但它对我不起作用。我写了这个脚本:

screen -X -S JavaTelegramBot quit
screen -d -m -S JavaTelegramBot
screen -X -S JavaTelegramBot java -jar "path/to/jar" 

当我给小费时screen -ls,它是空的,所以应用程序无法工作。我什至尝试使用nohup。它只启动应用程序几秒钟,直到詹金斯完成他的构建。构建后在 jenkins 中使用 cmd 命令启动的脚本

答案1

这是由于詹金斯的进程树杀手,这会在作业退出后杀死 Jenkins 作业启动的所有进程(即使您使用 screen/tmux/nohup/etc 在后台运行作业)。

根据上面链接的文档,防止 Jenkins 终止长时间运行的进程的方法是设置一个环境变量:

如果您的构建想要让守护进程留在后面运行......

实现此目的的一个便捷方法是更改​​ Jenkins 的 ProcessTreeKiller 正在寻找的环境变量 BUILD_ID。这将导致 Jenkins 假设您的守护进程不是由 Jenkins 构建生成的。例如:

BUILD_ID=dontKillMe /usr/apache/bin/httpd

如果是 Jenkins Pipeline,请使用 JENKINS_NODE_COOKIE 而不是 BUILD_ID

相关内容