Jenkins EC2 Agent实例创建失败,报404 NOT FOUND错误求助
我之前碰到过几乎一模一样的问题,结合你的错误日志和排查经验,这个404错误本质是Agent节点注册失败,导致Jenkins Master无法识别该节点,最终触发实例终止。下面是几个最可能的原因和对应的解决办法:
1. 工作目录权限/存在性问题
从日志里看到启动Agent的命令是:
java -jar /tmp/remoting.jar -workDir /var/lib/jenkins
/var/lib/jenkins是Jenkins Master默认的工作目录,但在你的EC2 Agent实例上,这个目录大概率不存在;就算存在,后续Agent如果切换到非root用户运行,也会没有读写权限。当remoting.jar无法在指定工作目录创建文件时,Agent无法完成注册流程,Master就会认为该节点不存在,访问日志页面时返回404。
解决方法:
- 在EC2插件配置中,把Agent的工作目录改成Agent实例上已存在且有读写权限的路径,比如
/tmp/jenkins-agent; - 或者在EC2实例的初始化脚本(User Data)里提前创建目录并设置权限:
mkdir -p /var/lib/jenkins && chmod 777 /var/lib/jenkins
2. Remoting版本与Java/Jenkins版本不兼容
你的Agent实例用的是Java 8(openjdk full version "1.8.0_265"),如果Jenkins Master版本较新,自带的remoting.jar可能不再支持Java 8,导致Agent启动失败。虽然日志显示已经拷贝了remoting.jar,但实际运行时可能抛出兼容性异常,直接中断注册流程。
解决方法:
- 升级Agent实例的Java版本到Java 11(Jenkins官方推荐的长期支持版本);
- 在EC2插件的“Advanced”设置里,找到“Remoting jar URL”,填入兼容Java 8的remoting版本链接,比如
https://repo.jenkins-ci.org/public/org/jenkins-ci/main/remoting/4.13/remoting-4.13.jar(这个版本明确支持Java 8)。
3. 节点名称包含特殊字符
你的节点名称是EC2 (Jenkins Agent 1) - Jenkins Agent (i-01c45e1be3ca4ab2f),里面包含空格、括号等特殊字符,Jenkins的Stapler框架在解析节点URI时会出现编码冲突,导致无法找到对应的日志页面,同时节点注册也会受影响。
解决方法:
- 修改EC2插件的“Node Name”模板,用更简洁的命名规则,比如只保留实例ID:
jenkins-agent-${INSTANCE_ID},或者用下划线代替空格和特殊字符,避免URI编码出问题。
4. Agent无法反向连接Jenkins Master
虽然SSH连接成功了,但Agent启动后需要反向连接到Jenkins Master的服务端口(默认8080)完成注册。如果Master的安全组没有开放Agent实例所在IP/安全组的访问权限,Agent就无法完成注册,Master会判定节点无效并终止实例,同时访问日志页面返回404。
解决方法:
- 检查Jenkins Master的安全组规则,确保允许Agent实例所在的安全组访问Master的Jenkins端口(TCP 8080,如果你修改过端口则对应调整);
- 如果使用JNLP连接模式,还要确保开放50000端口(默认的JNLP代理端口)。
附你的错误日志:
Nov 09, 2020 12:15:58 PM hudson.plugins.ec2.EC2Cloud INFO: The SSH key **** has been successfully checked against the instance console for connections to EC2 (Jenkins Agent 1) - Jenkins Agent (****)
Nov 09, 2020 12:15:58 PM hudson.plugins.ec2.EC2Cloud INFO: Connected via SSH.
Nov 09, 2020 12:15:58 PM hudson.plugins.ec2.EC2Cloud INFO: connect fresh as root
Nov 09, 2020 12:15:58 PM hudson.plugins.ec2.EC2Cloud INFO: Connecting to **** on port ****, with timeout 10000.
Nov 09, 2020 12:15:58 PM hudson.plugins.ec2.EC2Cloud INFO: Connection allowed after the host key has been verified
Nov 09, 2020 12:15:58 PM hudson.plugins.ec2.EC2Cloud INFO: Connected via SSH.
Nov 09, 2020 12:15:58 PM hudson.plugins.ec2.EC2Cloud INFO: Creating tmp directory (/tmp) if it does not exist
Nov 09, 2020 12:16:03 PM hudson.plugins.ec2.EC2Cloud INFO: Verifying: java -fullversion openjdk full version "1.8.0_265-8u265-b01-0ubuntu2~20.04-b01"
Nov 09, 2020 12:16:03 PM hudson.plugins.ec2.EC2Cloud INFO: Verifying: which scp /usr/bin/scp
Nov 09, 2020 12:16:03 PM hudson.plugins.ec2.EC2Cloud INFO: Copying remoting.jar to: /tmp
Nov 09, 2020 12:16:03 PM hudson.plugins.ec2.EC2Cloud INFO: Launching remoting agent (via Trilead SSH2 Connection): java -jar /tmp/remoting.jar -workDir /var/lib/jenkins
HTTP ERROR 404 Not Found
URI: /computer/EC2%20(Jenkins%20Agent%201)%20-%20Jenkins%20Agent%20(i-01c45e1be3ca4ab2f)/logText/progressiveHtml
STATUS: 404
MESSAGE: Not Found
SERVLET: Stapler
Powered by Jetty:// 9.4.30.v20200611
内容的提问来源于stack exchange,提问作者egib

