Jenkins作业结束后进程被终止,如何让进程持续运行?
问题
我有一段用于启动进程的PowerShell脚本:
$pinfo = New-Object System.Diagnostics.ProcessStartInfo // $pinfo = <necessary_settings> $p = New-Object System.Diagnostics.Process $p.StartInfo = $pinfo $p.Start()
我使用该进程完成一些操作后作业结束,但Jenkins会终止此进程。由于后续串行作业也需要该进程,我希望它能持续运行,该如何实现?
我已搜索到两种解决方案,但不清楚具体用法:
- 在从节点启动Jenkins时传入参数
-Dhudson.util.ProcessTree.disable=true,但系统不认可该有效选项,不确定操作是否正确; - 看到有人推荐使用
BUILD_ID=dontKillMe,但不清楚该参数应在何处设置。
解决方案
1. 全局禁用代理节点的进程清理(-Dhudson.util.ProcessTree.disable=true)
这个参数是Jenkins代理节点的JVM启动参数,需在启动代理时添加,而非主节点:
- 若通过Java命令直接启动代理:在
java命令后追加该参数,示例:java -Dhudson.util.ProcessTree.disable=true -jar agent.jar -url http://jenkins-master-url/ -secret <agent-secret> -name <agent-name> - 若代理以Windows服务运行:找到对应服务,进入“属性”→“常规”→“可执行文件路径”,在
java.exe后插入-Dhudson.util.ProcessTree.disable=true。
注意:此设置为全局生效,该代理上所有作业启动的进程都不会被Jenkins自动终止,需自行管理进程生命周期。
2. 单个Job级别排除进程清理(BUILD_ID=dontKillMe)
此方法仅对当前Job生效,有两种设置方式:
方式一:通过Job配置页面设置
- 打开目标Jenkins Job的配置页面;
- 找到“构建环境”板块,勾选“设置环境变量”;
- 添加环境变量:变量名填
BUILD_ID,变量值填dontKillMe; - 保存配置后,该Job启动的进程在作业结束后不会被Jenkins终止。
方式二:在PowerShell脚本内设置
在启动进程前先设置环境变量,示例:
$env:BUILD_ID = "dontKillMe" $pinfo = New-Object System.Diagnostics.ProcessStartInfo # 配置进程启动信息,比如指定可执行文件路径 $pinfo.FileName = "your-target-executable.exe" # 其他必要配置(如参数、工作目录等)... $p = New-Object System.Diagnostics.Process $p.StartInfo = $pinfo $p.Start()
内容的提问来源于stack exchange,提问作者SaffronBrick
相关产品推荐
相关产品推荐

