Jenkins节点启动报错:Remote call异常及任务无法执行求助
Jenkins节点启动异常排查请求
背景
- 刚接手负责夜间运行C++数据流水线的Jenkins实例,替换离职工程师的个人GitHub和AWS密钥为服务账号及部署密钥后,所有节点启动均出现报错
- 拥有一台名为
dinky-launcher的EC2 Ubuntu节点,用于按需生成新的EC2实例运行任务,该节点启动时抛出异常 - 从自定义AMI生成的EC2实例启动任务时,同样抛出异常且无法执行任务配置的脚本
- 已验证新凭据可用,更新Jenkins并重启主从节点后,问题仍未解决
dinky-launcher节点启动异常日志
<===[JENKINS REMOTING CAPACITY]===>channel started Remoting version: 3206.vb_15dcf73f6a_9 Launcher: SSHLauncher Communication Protocol: Standard in/out This is a Unix agent ERROR: Unexpected error in launching an agent. This is probably a bug in Jenkins Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to dinky-launcher at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1787) at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:356) at hudson.remoting.Channel.call(Channel.java:1003) at hudson.FilePath.act(FilePath.java:1317) at org.jenkinsci.plugins.envinject.EnvInjectComputerListener.onOnline(EnvInjectComputerListener.java:144) at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:751) at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:441) at hudson.plugins.sshslaves.SSHLauncher.startAgent(SSHLauncher.java:645) at hudson.plugins.sshslaves.SSHLauncher.lambda$launch$0(SSHLauncher.java:465) java.lang.reflect.InaccessibleObjectException: Unable to make private native java.lang.reflect.Field[] java.lang.Class.getDeclaredFields0(boolean) accessible: module java.base does not "opens java.lang" to unnamed module @370a2c53 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) at org.jenkinsci.plugins.envinject.service.EnvInjectMasterEnvVarsSetter.getModifiers(EnvInjectMasterEnvVarsSetter.java:29) at org.jenkinsci.plugins.envinject.service.EnvInjectMasterEnvVarsSetter.call(EnvInjectMasterEnvVarsSetter.java:55) at org.jenkinsci.plugins.envinject.service.EnvInjectMasterEnvVarsSetter.call(EnvInjectMasterEnvVarsSetter.java:19) at hudson.remoting.UserRequest.perform(UserRequest.java:211) at hudson.remoting.UserRequest.perform(UserRequest.java:54) at hudson.remoting.Request$2.run(Request.java:377) at hudson.remoting.InterceptingExecutorService.lambda$wrap$0(InterceptingExecutorService.java:78) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:840) Agent successfully connected and online
自定义AMI生成的EC2实例异常日志
ERROR: Unexpected error in launching an agent. This is probably a bug in Jenkins Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to EC2 (mindevimage-ec2-jenkins-agents) - medium 256 jenkins worker (i-005bbc4ecf73b5729) at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784) at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:356) at hudson.remoting.Channel.call(Channel.java:1000) at hudson.FilePath.act(FilePath.java:1283) at org.jenkinsci.plugins.envinject.EnvInjectComputerListener.onOnline(EnvInjectComputerListener.java:144) at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:747) at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:437) at hudson.plugins.ec2.ssh.EC2UnixLauncher.launchScript(EC2UnixLauncher.java:284) at hudson.plugins.ec2.EC2ComputerLauncher.launch(EC2ComputerLauncher.java:48) at hudson.slaves.SlaveComputer.lambda$_connect$0(SlaveComputer.java:297) at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46) at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:80) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:840) java.lang.reflect.InaccessibleObjectException: Unable to make private native java.lang.reflect.Field[] java.lang.Class.getDeclaredFields0(boolean) accessible: module java.base does not "opens java.lang" to unnamed module @70fef5cc at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) at org.jenkinsci.plugins.envinject.service.EnvInjectMasterEnvVarsSetter.getModifiers(EnvInjectMasterEnvVarsSetter.java:29) at org.jenkinsci.plugins.envinject.service.EnvInjectMasterEnvVarsSetter.call(EnvInjectMasterEnvVarsSetter.java:55) at org.jenkinsci.plugins.envinject.service.EnvInjectMasterEnvVarsSetter.call(EnvInjectMasterEnvVarsSetter.java:19) at hudson.remoting.UserRequest.perform(UserRequest.java:211) at hudson.remoting.UserRequest.perform(UserRequest.java:54) at hudson.remoting.Request$2.run(Request.java:377) at hudson.remoting.InterceptingExecutorService.lambda$wrap$0(InterceptingExecutorService.java:78) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833)
问题根因
异常核心是java.lang.reflect.InaccessibleObjectException,由EnvInject插件的EnvInjectMasterEnvVarsSetter类尝试通过反射访问Java 9+模块化系统中被限制的java.lang.Class.getDeclaredFields0方法导致。Java 9引入模块系统后,默认不允许未命名模块访问核心模块的内部API,而旧版本EnvInject插件未适配该特性。
替换凭据是操作触发点,但实际问题与凭据无关,是插件兼容性问题——可能更新Jenkins后,EnvInject插件版本未同步升级,或者插件本身存在兼容性bug。
解决步骤
- 升级EnvInject插件:进入Jenkins管理界面→插件管理→已安装,找到
EnvInject插件,升级到最新稳定版;若最新版仍有问题,尝试降级到适配当前Jenkins版本的稳定版本 - 临时禁用EnvInject插件:若升级无效,可临时禁用该插件,验证节点是否能正常启动并执行任务;禁用后需重启Jenkins
- 添加JVM参数适配模块化限制:若必须使用旧版本EnvInject插件,在Jenkins主节点和代理节点的JVM启动参数中添加
--add-opens java.base/java.lang=ALL-UNNAMED;主节点修改jenkins.service(Linux)或jenkins.xml(Windows)中的参数,代理节点修改启动脚本参数 - 检查代理节点Java版本:确认所有代理节点使用的Java版本与Jenkins主节点兼容,避免Java版本过高(如Java 17)与旧插件不兼容
内容的提问来源于stack exchange,提问作者GMStevens
相关产品推荐
相关产品推荐

