从Jenkins在后台启动外壳脚本的简洁方法

67up9zun  于 2022-09-20  发布在  Jenkins
关注(0)|答案(2)|浏览(234)

从Jenkins启动脚本、不挂起构建并保持进程运行的正确方法是什么?我好像不能让它起作用。要么脚本无法运行,要么构建挂起。

如果我放入构建的“执行外壳”步骤bash relaunch.sh &relaunch.sh > output.log &nohup bash relaunch.sh &,则不会发生任何事情;构建完成,但进程不会运行。我猜这可能与Jenkins等待error pipe to close有关。

如果我按照建议的here执行nohup bash relaunch.sh 2>&1 > output.log,输出将正确重定向,但构建挂起(未完成),并且当我终止构建时,该进程将终止。

按照建议的hereherehereexport BUILD_ID=dontKillMe添加到“执行外壳”步骤,或者脚本本身也没有帮助。当我终止构建时,构建挂起,进程终止。不用说,我对Linux的了解非常有限。

人们如何以一种干净的方式做到这一点?

nfzehxib

nfzehxib1#

实现这一点的一种便捷方法是更改Jenkins'sProcessTreeKiller正在查找的EXECUTE SHELL下的环境变量BUILD_ID

通过这样做,

BUILD_ID=dontKillMe nohup bash relaunch.sh &

Jenkins将假设后台作业不是由构建产生的,并且不会在完成作业后杀死它们。

感谢Joshua的观察,您还可以使用JENKINS_NODE_COOKIE作为

JENKINS_NODE_COOKIE=dontKillMe
vddsk6oq

vddsk6oq2#

我也遇到了完全相同的问题。我最终通过在Jenkins Execute外壳框中放置以下内容来修复此问题:

BUILD_ID=dontKillMe ./grid.sh

我将&移到了脚本文件中。下面是脚本的样子:


# !/bin/bash

java -jar selenium-server-standalone-3.0.1.jar -role hub &

希望这对某些人有帮助!

相关问题