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

Jenkins带文件参数的定时任务排队后执行报空指针错误求助

问题根源

这个空指针错误的核心原因是:文件参数对应的临时文件在任务排队等待期间被Jenkins的临时文件清理机制删除了。Jenkins默认临时文件仅保留1天,你的任务排队长达两天,执行时临时文件已被清理,导致调用FileItem.getName()时触发空指针。

解决方案

1. 延长临时文件保留时长

Jenkins通过JVM系统属性hudson.util.FilePath.TEMP_FILE_RETENTION_DAYS控制临时文件保留天数,默认值为1。你可以在Jenkins启动时添加该参数延长保留时间:

  • 如果是Docker部署,修改容器启动命令,添加JVM参数:
    java -Dhudson.util.FilePath.TEMP_FILE_RETENTION_DAYS=3 -jar /usr/share/jenkins/jenkins.war
    
  • 若使用docker-compose,在配置文件中更新command字段:
    services:
      jenkins:
        image: jenkins/jenkins:2.387.2
        command: java -Dhudson.util.FilePath.TEMP_FILE_RETENTION_DAYS=3 -jar /usr/share/jenkins/jenkins.war
        # 其他挂载、端口配置...
    

2. 避免任务长时间排队

  • 检查Jenkins executor数量是否足够,周末是否有大量任务抢占资源,适当增加executor数量。
  • 调整任务调度时间,避免集中在周日执行,或者给该任务设置更高优先级,减少排队等待时间。

3. 替换文件参数的实现方式

放弃使用内置的文件参数,改用更稳定的文件传递方式:

  • 将文件上传到Jenkins服务器的持久化目录(而非临时目录),任务中直接读取该路径下的文件。
  • 如果文件体积较小,将文件内容转为文本参数,任务执行时再将文本写入本地文件使用。

4. 检查Docker临时目录挂载配置

如果Jenkins容器的临时目录挂载到了宿主机的自动清理目录(比如宿主机/tmp),修改挂载为持久化目录:

volumes:
  - ./jenkins-temp:/tmp

确保宿主机的jenkins-temp目录不会被系统定时任务清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:38:33