强制jenkins slave使用内部主机?

时间:2016-09-04 17:33:24

标签: jenkins

如何强制jenkins slave通过其实际JNLP连接的run命令连接到内部主机名?

以下有关实际问题的更多信息(使用虚假域名)

命令运行:

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内部端口是有效的。无望地试图无法到达的港口。

我一直试图超越命令强制它使用内部主机名,奴隶支持

2 个答案:

答案 0 :(得分:4)

在JNLP奴隶的高级配置选项卡中,有一个选项Tunnel connection through

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

答案 1 :(得分:0)

运行以下命令,在slave.jar

之前阻止公共主机
echo "127.0.0.1 jenkins.fakehost.com" >> /etc/hosts

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

进行连接

最后,我修改了docker容器(https://hub.docker.com/r/picoded/jenkins-build-slave/) 允许我运行"命令"在詹金斯创业之前。

注意:问题保持开放,答案较少hacky =)