【问题标题】:Unable to connect local slave to Jenkins master on AWS无法将本地从站连接到 AWS 上的 Jenkins 主站
【发布时间】:2019-03-16 19:23:35
【问题描述】:

我已经在 AWS ec2 实例上设置了 Jenkins。我有几台机器(Ubuntu、Mac),它们应该是奴隶。

我已经在我的 Jenkins 主节点上配置了节点,我正在尝试使用 JNLP-4 协议通过随机端口连接从节点。

我已启用安全性,将代理的 TCP 端口选择为随机,启用 CLI over remoting,启用代理 -> 主访问控制。

完成所有这些操作后,当我尝试连接时,出现以下错误:

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 没有任何问题。

可能是什么问题?

【问题讨论】:

  • 请提供有关您的设置的更多信息。您的 Jenkins 从属服务器也在 AWS 上,或者它们是本地机器?首先,您需要确保网络配置正确。使用“nc”之类的工具来验证这一点。 SSH 到 Jenkins master 并执行“nc ”。并且看到它完全可以到达奴隶。
  • 是的,我的机器是本地机器。关于网络,它们配置正确。我检查了两个不同的网络。一种带防火墙,一种不带防火墙。
  • 尝试运行这个 netcat 命令并告诉结果。通常远程主机应该在一段时间后断开连接。如果不是这种情况并且连接只是“挂起”,那么网络是不正确的。
  • 我发现,我所有的网络连接都按要求工作。
  • 还有一个关于在一些安全敏感网络后面配置端口的信息,这可能会阻止我建立这个连接。 stackoverflow.com/questions/38729686/…

标签: macos amazon-web-services ubuntu jenkins amazon-ec2


【解决方案1】:

/etc/default/jenkins 中设置属性-Dhudson.TcpSlaveAgentListener.hostName 解决了我的问题。

【讨论】:

    【解决方案2】:

    将端口更改为固定端口而不是随机端口,并允许 aws 中的特定端口作为 TCP 的例外,解决了这个问题。

    【讨论】:

      【解决方案3】:

      如果您在环境变量中设置了 http_proxy/https_proxy(并且它是 jenkins 不喜欢的代理),那么这也会引发这个神秘的错误。

      【讨论】:

        【解决方案4】:

        由于您的 Jenkins AWS 实例位于防火墙之后,您的从属服务器将无法使用您的给定端口进行连接(49187) strong> 如果端口本身没有打开。 简单;

        • 在 AWS 控制台上添加一个安全组,允许连接从 IP 地址的端口(在本例中为 49187)。

        p.s:如果它是一个随机的 Jenkins 机器,一个简单的 sudo ufw allow 49187 就足够了:)

        【讨论】:

          【解决方案5】:

          如果不是防火墙问题,请确保在运行 Jenkins 时将设置“Dhudson.TcpSlaveAgentListener.hostName”设置为 Jenkins master 的 FQDN,或者代理可以确定的部分记录。 在我们的例子中,这没有被配置为 FQDN,并且从站无法访问记录。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-05-21
            • 1970-01-01
            • 1970-01-01
            • 2020-10-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-26
            相关资源
            最近更新 更多