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

Jenkins EC2插件请求Spot实例时触发NullPointerException故障

Jenkins EC2插件Spot实例初始化失败解决方案

问题概述

周末后Jenkins启动失败,EC2插件处理Spot实例时触发NullPointerException,导致Jenkins无法完成初始化。此前EC2插件结合Spot实例作为构建代理长期运行正常,当前Jenkins版本为最新LTS容器版2.414.1。

已尝试的无效操作:

  • 移除EC2插件后Jenkins可正常加载,但重新安装(含回滚至2.0.6旧版本)问题依旧
  • 为节点关联的IAM角色添加管理员权限无改善

报错日志

2023-09-18 11:33:25.098+0000 [id=30]    INFO    jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
2023-09-18 11:33:25.592+0000 [id=30]    SEVERE  jenkins.InitReactorRunner$1#onTaskFailed: Failed Loading global config
java.lang.NullPointerException
    at hudson.plugins.ec2.EC2SpotSlave.getSpotRequest(EC2SpotSlave.java:137)
    at hudson.plugins.ec2.EC2SpotSlave.getInstanceId(EC2SpotSlave.java:179)
    at hudson.plugins.ec2.EC2Computer.getInstanceId(EC2Computer.java:69)
    at hudson.plugins.ec2.EC2Computer.getState(EC2Computer.java:187)
    at hudson.plugins.ec2.EC2RetentionStrategy.start(EC2RetentionStrategy.java:279)
    at hudson.plugins.ec2.EC2RetentionStrategy.start(EC2RetentionStrategy.java:53)
    at hudson.model.AbstractCIBase.createNewComputerForNode(AbstractCIBase.java:192)
    at hudson.model.AbstractCIBase.updateComputer(AbstractCIBase.java:153)
    at hudson.model.AbstractCIBase$1.run(AbstractCIBase.java:255)
    at hudson.model.Queue._withLock(Queue.java:1397)
    at hudson.model.Queue.withLock(Queue.java:1271)
    at hudson.model.AbstractCIBase.updateComputerList(AbstractCIBase.java:238)
    at jenkins.model.Jenkins.updateComputerList(Jenkins.java:1693)
    at jenkins.model.Nodes$6.run(Nodes.java:351)
    at hudson.model.Queue._withLock(Queue.java:1397)
    at hudson.model.Queue.withLock(Queue.java:1271)
    at jenkins.model.Nodes.load(Nodes.java:346)
    at jenkins.model.Jenkins$12.run(Jenkins.java:3453)
    at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:177)
    at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:305)
    at jenkins.model.Jenkins$5.runTask(Jenkins.java:1166)
    at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221)
    at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120)
    at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
2023-09-18 11:33:25.597+0000 [id=22]    SEVERE  hudson.util.BootFailure#publish: Failed to initialize Jenkins
java.lang.NullPointerException
    at hudson.plugins.ec2.EC2SpotSlave.getSpotRequest(EC2SpotSlave.java:137)
    at hudson.plugins.ec2.EC2SpotSlave.getInstanceId(EC2SpotSlave.java:179)
    at hudson.plugins.ec2.EC2Computer.getInstanceId(EC2Computer.java:69)
    at hudson.plugins.ec2.EC2Computer.getState(EC2Computer.java:187)
    at hudson.plugins.ec2.EC2RetentionStrategy.start(EC2RetentionStrategy.java:279)
    at hudson.plugins.ec2.EC2RetentionStrategy.start(EC2RetentionStrategy.java:53)
    at hudson.model.AbstractCIBase.createNewComputerForNode(AbstractCIBase.java:192)
    at hudson.model.AbstractCIBase.updateComputer(AbstractCIBase.java:153)
    at hudson.model.AbstractCIBase$1.run(AbstractCIBase.java:255)
    at hudson.model.Queue._withLock(Queue.java:1397)
    at hudson.model.Queue.withLock(Queue.java:1271)
    at hudson.model.AbstractCIBase.updateComputerList(AbstractCIBase.java:238)
    at jenkins.model.Jenkins.updateComputerList(Jenkins.java:1693)
    at jenkins.model.Nodes$6.run(Nodes.java:351)
    at hudson.model.Queue._withLock(Queue.java:1397)
    at hudson.model.Queue.withLock(Queue.java:1271)
    at jenkins.model.Nodes.load(Nodes.java:346)
    at jenkins.model.Jenkins$12.run(Jenkins.java:3453)
    at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:177)
    at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:305)
    at jenkins.model.Jenkins$5.runTask(Jenkins.java:1166)
    at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221)
    at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120)
    at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused: org.jvnet.hudson.reactor.ReactorException
    at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:290)
    at jenkins.InitReactorRunner.run(InitReactorRunner.java:49)
    at jenkins.model.Jenkins.executeReactor(Jenkins.java:1201)
    at jenkins.model.Jenkins.<init>(Jenkins.java:989)
    at hudson.model.Hudson.<init>(Hudson.java:86)
    at hudson.model.Hudson.<init>(Hudson.java:82)
    at hudson.WebAppMain$3.run(WebAppMain.java:247)
Caused: hudson.util.HudsonFailedToLoad
    at hudson.WebAppMain$3.run(WebAppMain.java:264)
2023-09-18 11:33:25.611+0000 [id=22]    INFO    hudson.lifecycle.Lifecycle#onStatusUpdate: Stopping Jenkins

排查与解决步骤

1. 清理损坏的Spot节点配置

Jenkins启动时读取到失效的Spot节点配置,导致空指针异常。手动清理配置:

  • 进入Jenkins容器内的数据目录(默认路径:/var/jenkins_home)
  • 找到nodes文件夹下对应Spot节点的子目录,直接删除
  • 重启Jenkins后,重新配置EC2 Spot代理节点

2. 验证AWS Spot请求状态

  • 登录AWS控制台,检查历史Spot请求是否存在已终止、失效的记录
  • 若Jenkins配置中引用了已失效的Spot请求ID,清除该配置项后重新配置

3. 确认插件与Jenkins版本兼容性

回滚旧版本插件未必适配最新Jenkins LTS,建议:

  • 查找EC2插件官方版本适配表,选择与Jenkins 2.414.1兼容的稳定版插件(而非最旧版)
  • 卸载现有插件后,安装适配版本重新测试

4. 检查容器数据卷完整性

容器化部署下,数据卷可能存在配置文件损坏:

  • 备份当前/var/jenkins_home目录数据
  • 创建全新Jenkins容器,仅安装EC2插件并配置Spot节点,验证是否能正常启动
  • 若新容器正常,逐步迁移旧配置(排除节点配置)到新容器,定位损坏配置项

5. 检查EC2插件配置完整性

从报错栈可知,EC2SpotSlave.java:137处获取Spot请求对象时为空,需检查:

  • Jenkins全局配置中EC2云的Spot节点模板,确认所有必填项(如实例类型、AMI ID、子网配置等)完整
  • 若使用动态创建Spot实例,检查启动模板是否配置正确且能正常创建实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:55:03