-
Bug
-
Resolution: Unresolved
-
Minor
-
None
When using a init.groovy.d script to set the slave agent port to a fixed value (like the official docker image for Jenkins does), Jenkins shows an error message that seem to tell us that it failed to listen to the agent port.
java.net.BindException: Failed to listen on port 10000 because it's already in use.
at hudson.TcpSlaveAgentListener.<init>(TcpSlaveAgentListener.java:74)
at jenkins.model.Jenkins.<init>(Jenkins.java:825)
at hudson.model.Hudson.<init>(Hudson.java:83)
at hudson.model.Hudson.<init>(Hudson.java:79)
at hudson.WebAppMain$3.run(WebAppMain.java:225)
Caused by: java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:436)
at sun.nio.ch.Net.bind(Net.java:428)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
at hudson.TcpSlaveAgentListener.<init>(TcpSlaveAgentListener.java:72)
... 4 more
As a workaround, people have been adding delays, but really the issue is that we have the following sequence of events occurring :
- Jenkins init
- init.groovy.d
- calls Jenkins.getInstance(). setSlaveAgentPort(xxx)
- behind the scenes, this call starts the TcpSlaveAgentListener
- calls Jenkins.getInstance(). setSlaveAgentPort(xxx)
- initializes TcpSlaveAgentListener, but doesn't suppose that it may have been started before => the port is already taken, hence the error message above.