【问题标题】:force jenkins slave to use internal host?强制詹金斯奴隶使用内部主机?
【发布时间】:2016-09-05 14:14:30
【问题描述】:

如何强制 jenkins 从站通过其运行命令连接到内部主机名以进行实际 JNLP 连接?

更多关于实际问题的信息(使用假域名)


命令运行:

java -jar slave.jar \
     -jnlpUrl http://jenkins.fakehost.internal/computer/SLAVE_NAME/slave-agent.jnlp \
     -secret SECRET;

输出 ....

Sep 04, 2016 5:21:38 PM hudson.remoting.jnlp.Main$CuiListener status
9/5/2016 1:21:38 AMINFO: Locating server among [https://jenkins.fakehost.com/, http://jenkins-internal.fakehost.com/]
9/5/2016 1:21:38 AMSep 04, 2016 5:21:38 PM hudson.remoting.jnlp.Main$CuiListener status
9/5/2016 1:21:38 AMINFO: Handshaking
9/5/2016 1:21:38 AMSep 04, 2016 5:21:38 PM hudson.remoting.jnlp.Main$CuiListener status
9/5/2016 1:21:38 AMINFO: Connecting to jenkins.fakehost.com:50000

这随后导致了。

9/5/2016 1:23:56 AM java.net.ConnectException: Connection timed out
9/5/2016 1:23:56 AM at java.net.PlainSocketImpl.socketConnect(Native Method)
9/5/2016 1:23:56 AM at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
9/5/2016 1:23:56 AM at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
9/5/2016 1:23:56 AM at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
9/5/2016 1:23:56 AM at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
9/5/2016 1:23:56 AM at java.net.Socket.connect(Socket.java:589)
9/5/2016 1:23:56 AM at java.net.Socket.connect(Socket.java:538)
9/5/2016 1:23:56 AM at hudson.remoting.Engine.connect(Engine.java:369)
9/5/2016 1:23:56 AM at hudson.remoting.Engine.run(Engine.java:267)

问题是,尽管提供了内部主机名,但从代理尝试检查其公共主机名。并且作为它的 https 端口,但不是 50k 内部端口是有效的。绝望地尝试到一个它无法到达的港口。

我一直试图覆盖命令以强制它使用从站支持的内部主机名

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    在您的 JNLP 从站的高级配置选项卡中,有一个选项 Tunnel connection through

    输入jenkins.fakehost.internal: 应该可以解决问题。

    【讨论】:

    • 隧道连接:是http端口还是jnlp端口(50,000)?
    • 那是用于 JNLP 连接的。 http(s) 部分在您这边已经可以正常工作(仅传递 JNLP 连接详细信息)。失败的是之后开始的 JNLP 连接建立。通过配置隧道,您可以覆盖 Jenkins 关于其运行位置的想法(即,在初始 HTTP 部分中传递的 JNLP 连接信息)。
    【解决方案2】:

    运行以下命令,在slave.jar之前阻止公共主机

    echo "127.0.0.1 jenkins.fakehost.com" >> /etc/hosts
    

    这将强制从服务器通过备用给定主机名进行连接

    最后,我修改了 docker 容器 (https://hub.docker.com/r/picoded/jenkins-build-slave/) 让我在 jenkins 启动之前运行一个“命令”。

    注意:问题悬而未决,答案不那么老套=)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2014-11-02
      • 2018-08-02
      • 2018-04-30
      • 1970-01-01
      相关资源
      最近更新 更多