You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins作业结束后进程被终止,如何让进程持续运行?

问题

我有一段用于启动进程的PowerShell脚本:

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
// $pinfo = <necessary_settings>

$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo

$p.Start()

我使用该进程完成一些操作后作业结束,但Jenkins会终止此进程。由于后续串行作业也需要该进程,我希望它能持续运行,该如何实现?

我已搜索到两种解决方案,但不清楚具体用法:

  1. 在从节点启动Jenkins时传入参数-Dhudson.util.ProcessTree.disable=true,但系统不认可该有效选项,不确定操作是否正确;
  2. 看到有人推荐使用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配置页面设置

  1. 打开目标Jenkins Job的配置页面;
  2. 找到“构建环境”板块,勾选“设置环境变量”;
  3. 添加环境变量:变量名填BUILD_ID,变量值填dontKillMe;
  4. 保存配置后,该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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:02:45