>我已经在 AWS ec2 实例上设置了一个 Jenkins。我有几台机器(Ubuntu,Mac(,它们应该是奴隶。
我已经在我的 Jenkins 主服务器上配置了节点,我正在尝试通过随机端口使用 JNLP-4 协议连接从站。
我启用了安全性,为代理选择了 TCP 端口作为随机、通过远程处理启用 CLI、启用代理 ->主访问控制。
完成所有这些操作后,当我尝试连接时,出现以下错误:
Vighneshs-MBP:Downloads vighneshpai$ java -jar agent.jar -jnlpUrl https://my.host.name/computer/Mac/slave-agent.jnlp -secret cf400d1a4e0a1dcc75da2b361efafbce3321e17b935bdcf14350a36e
Oct 11, 2018 8:43:50 PM hudson.remoting.jnlp.Main createEngine
INFO: Setting up agent: Mac
Oct 11, 2018 8:43:50 PM hudson.remoting.jnlp.Main$CuiListener <init>
INFO: Jenkins agent is running in headless mode.
Oct 11, 2018 8:43:50 PM hudson.remoting.Engine startEngine
INFO: Using Remoting version: 3.25
Oct 11, 2018 8:43:50 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /Users/vighneshpai/Downloads/remoting as a remoting work directory
Both error and output logs will be printed to /Users/vighneshpai/Downloads/remoting
Oct 11, 2018 8:43:50 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [https://my.host.name/]
Oct 11, 2018 8:43:51 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [JNLP4-connect, JNLP-connect, Ping, JNLP2-connect, JNLP3-connect]
Oct 11, 2018 8:43:56 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver isPortVisible
WARNING: connect timed out
Oct 11, 2018 8:43:56 PM hudson.remoting.jnlp.Main$CuiListener error
SEVERE: https://my.host.name/ provided port:49187 is not reachable
java.io.IOException: https://my.host.name/ provided port:49187 is not reachable
at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:286)
at hudson.remoting.Engine.innerRun(Engine.java:523)
at hudson.remoting.Engine.run(Engine.java:474)
我还尝试使用固定端口,并将该端口添加到允许的入站访问端口列表中。仍然无法连接。
相同的机器,连接到本地机器上运行的 Jenkins 没有任何问题。
可能是什么问题?
在/etc/default/jenkins
中设置属性-Dhudson.TcpSlaveAgentListener.hostName
解决了我的问题。
将端口更改为固定而不是随机,并允许 aws 中的该特定端口作为 TCP 的例外,解决了这个问题。
如果你在环境变量中设置了http_proxy/https_proxy(这是 jenkins 不喜欢的代理((,那么这也将抛出这个神秘的错误。
由于您的 Jenkins AWS 实例位于防火墙后面,如果端口本身未打开,您的从属服务器将无法使用给定端口(49187(进行连接。 只是;
- 在 AWS 控制台上添加安全组,允许在端口(在本例中为 49187(上连接您的从属 IP 地址。
p.s:
如果它是一个随机的 Jenkins 机器,一个简单的sudo ufw allow 49187
应该就足够了:(
如果不是防火墙问题,请确保在将 Jenkins 运行到 Jenkins master 的 FQDN 时设置了"Dhudson.TcpSlaveAgentListener.hostName"设置,或者代理可以肯定到达的部分记录。 在我们的例子中,这没有配置为FQDN,从站无法访问记录。
使用 URL 执行 Jenkins 服务器重新启动后,我的问题已解决 https://JenkinsURL/restart 或 https://JenkinsURL/SafeRestart