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验证:
重新运行Pipeline,若恢复正常,查看SELinux审计日志定位拒绝规则:setenforce 0grep jenkins /var/log/audit/audit.log - 生成并加载SELinux允许规则:
恢复SELinux宽容模式:ausearch -c 'java' --raw | audit2allow -M jenkins-agent semodule -i jenkins-agent.ppsetenforce 1
4. 验证插件兼容性
- 检查Durable Task Plugin的版本,确认其与Jenkins 2.479.2的兼容性(该插件负责
sh命令的持久化执行) - 尝试降级该插件至之前正常环境的版本,重新测试Pipeline
5. 核对JDK环境一致性
- 确保代理节点使用的JDK版本与主节点一致(JDK 17),避免跨版本兼容问题
- 检查代理节点的
JAVA_HOME和PATH环境变量配置,确认JDK路径正确
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

