gpt4 book ai didi

nginx - Jenkins:如何在 Nginx 反向代理后面配置 Jenkins 以供 JNLP 从站连接

转载 作者:行者123 更新时间:2023-12-04 05:23:15 29 4
gpt4 key购买 nike

我正在尝试设置一个 Jenkins 主节点和一个 Jenkins 从节点,其中 Jenkins 主节点位于具有 SSL 终止的不同服务器上的 Nginx 反向代理后面。 nginx配置如下:

upstream jenkins {
server <server ip>:8080 fail_timeout=0;
}

server {
listen 443 ssl;
server_name jenkins.mydomain.com;
ssl_certificate /etc/nginx/certs/mydomain.crt;
ssl_certificate_key /etc/nginx/certs/mydomain.key;

location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://jenkins;
}
}

server {
listen 80;
server_name jenkins.mydomain.com;
return 301 https://$server_name$request_uri;
}

JNLP 代理的 TCP 端口在 Jenkins 主全局安全配置中设置为 50000。端口 50000 设置为可从主机上的任何位置访问。

使用以下命令启动 JNLP 从站:
java -jar slave.jar -jnlpUrl https://jenkins.mydomain.com/computer/slave-1/slave-agent.jnlp -secret <secret>

JNLP slave 无法连接到 master 上配置的 JNLP 端口:
INFO: Connecting to jenkins.mydomain.com:50000 (retrying:4)
java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at hudson.remoting.Engine.connect(Engine.java:400)
at hudson.remoting.Engine.run(Engine.java:298)

JNLP slave 连接到 Jenkins master 需要什么配置?

最佳答案

JNLP 端口似乎使用二进制协议(protocol),而不是基于文本的 HTTP 协议(protocol),所以很遗憾,它不能像正常的 Jenkins 页面那样通过 NGINX 进行反向代理。

相反,您应该:

  • 配置全局安全 > 选中“启用安全”并设置一个固定
    “JNLP 从代理的 TCP 端口”。这将导致所有 Jenkins 页面
    发出指定此端口的额外 HTTP header :X-Hudson-CLI-Port,
    X-Jenkins-CLI-Port,X-Jenkins-CLI2-Port。
  • 允许您的固定 TCP JNLP
    端口通过任何防火墙,因此 CLI 客户端和 JNLP 代理可以
    直接到达后端的 Jenkins 服务器。
  • 设置系统属性hudson.TcpSlaveAgentListener.hostName
    后端 Jenkins 服务器的主机名或 IP 地址。这
    将导致所有页面发出额外的 HTTP header
    (X-Jenkins-CLI-Host) 包含此指定的主机名。这告诉
    CLI 客户端连接的位置,但据说不是 JNLP 代理。
  • 对于节点列表中的每个构建从机jenkins.mydomain.com/computer/使用 Launch 方法“通过 Java Web Start 启动从代理”,单击计算机,单击配置,单击 Launch 方法下右侧的高级...按钮,并适当设置“隧道连接通过”字段。阅读问号帮助。您可能只需要“HOST:”语法,其中 HOST 是后端 Jenkins 服务器的主机名或 IP 地址。

  • 引用:
  • https://issues.jenkins-ci.org/browse/JENKINS-11982
  • https://support.cloudbees.com/hc/en-us/articles/218097237-How-to-troubleshoot-JNLP-slaves-connection-issues-with-Jenkins
  • https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
  • 关于nginx - Jenkins:如何在 Nginx 反向代理后面配置 Jenkins 以供 JNLP 从站连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38729686/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com