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

Jenkins 2.479.2升级后Slave节点sh命令执行挂起求助

Jenkins Pipeline sh命令挂起失败(退出码-2)排查与解决

问题背景

  • 环境:Jenkins 2.479.2 + JDK 17,标签为Prod_Slave_56的代理节点已成功在线(显示“Agent successfully connected and online”)
  • 故障现象:新建Pipeline执行sh 'echo Hello, World! from Slave'时挂起,等待6分钟后失败,提示进程未在指定临时目录启动,建议添加-Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true参数排查,最终退出码为-2
  • 前置信息:SELinux处于启用且宽容模式,故障为Jenkins及插件升级后出现,旧版本环境运行正常

排查与解决步骤

1. 启用诊断参数获取详细日志

在Jenkins主节点的启动参数中添加-Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true,重启Jenkins后重新运行Pipeline,通过诊断日志确认:

  • 临时目录的实际路径是否存在
  • Jenkins代理进程对临时目录的访问权限
  • 进程启动失败的具体触发原因

2. 检查代理节点临时目录配置与权限

  • 进入Prod_Slave_56节点的配置页面,核对「Remote root directory」和「Temporary directory」的配置路径
  • 登录代理节点服务器,执行以下命令检查目录权限:
    # 替换为实际的临时目录路径
    ls -ld /path/to/tmp/dir
    # 检查Jenkins代理运行用户的权限(假设用户为jenkins)
    su - jenkins -c "touch /path/to/tmp/dir/test && rm /path/to/tmp/dir/test"
    
  • 若默认临时目录存在权限问题,手动指定一个权限明确的目录(如/var/jenkins_slave/tmp),并赋予Jenkins用户读写执行权限:
    mkdir -p /var/jenkins_slave/tmp
    chown jenkins:jenkins /var/jenkins_slave/tmp
    chmod 700 /var/jenkins_slave/tmp
    

3. 排查SELinux限制(宽容模式仍可能存在影响)

  • 临时关闭SELinux验证:
    setenforce 0
    
    重新运行Pipeline,若恢复正常,查看SELinux审计日志定位拒绝规则:
    grep jenkins /var/log/audit/audit.log
    
  • 生成并加载SELinux允许规则:
    ausearch -c 'java' --raw | audit2allow -M jenkins-agent
    semodule -i jenkins-agent.pp
    
    恢复SELinux宽容模式:setenforce 1

4. 验证插件兼容性

  • 检查Durable Task Plugin的版本,确认其与Jenkins 2.479.2的兼容性(该插件负责sh命令的持久化执行)
  • 尝试降级该插件至之前正常环境的版本,重新测试Pipeline

5. 核对JDK环境一致性

  • 确保代理节点使用的JDK版本与主节点一致(JDK 17),避免跨版本兼容问题
  • 检查代理节点的JAVA_HOME和PATH环境变量配置,确认JDK路径正确

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:23:11