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
相关产品推荐
相关产品推荐

